What happened
spec/audit.py reports both of these as hub-only findings on ptr727/HomeAutomation-Config on every run, current main included:
DRIFT hub-only: .github/actionlint.yaml is undeclared in spec/files.json and this repo carries it - read the file and triage it in spec/divergences.json 'gaps' (this repo's own content at a shared path, a carry to declare, or a hub copy to delete)
DRIFT hub-only: .github/actions/validate/action.yml is undeclared in spec/files.json and this repo carries it - read the file and triage it in spec/divergences.json 'gaps' (this repo's own content at a shared path, a carry to declare, or a hub copy to delete)
Read both -- they're genuinely this repo's own content at paths the hub also hosts, matching the existing accepted pattern already used for LICENSE, TODO.md, .husky/pre-commit, and scripts/README.md in the same gaps array:
.github/actionlint.yaml: this repo's own self-hosted-runner labels (homelab, ubuntu-24.04) for its self-hosted CI runner -- entirely different content from the hub's own .github/actionlint.yaml, which configures $/ self-reference ignore rules for the hub's own workflows.
.github/actions/validate/action.yml: this repo's own override of the interface-workflow validate hook (WORKFLOW.md's "Interface workflows" contract), running CloudInit's nested Python project through uv/ruff/pyright/pytest. The hub's own file at this same path is a different override -- its own registry/spec self-test suite. Per WORKFLOW.md, this is exactly the intended override mechanism: a repo declaring its own .github/actions/validate/action.yml is the documented way to plug a repo-specific validate hook into the shared validate-task.yml, not drift to reconcile.
There's no spec/divergences.json gaps entry for either path, so they stay untriaged and keep re-surfacing as findings with no way to close them out, unlike the four already-accepted paths above.
Suggested fix
Add two accepted entries to spec/divergences.json's gaps array, one per path, with a reason along the lines of "this repo's own content at a shared/interface path" (matching the existing accepted entries' shape), or -- for .github/actions/validate/action.yml specifically, since it's the documented interface-workflow override point named in WORKFLOW.md section 3 ("Interface workflows... Honor the named contract... rather than copying bytes") -- consider whether the detector should exempt interface-workflow override paths generically rather than needing a per-repo gaps entry for each repo that overrides one.
audit run 2026-08-25T13:46:24Z | hub fa63163
What happened
spec/audit.pyreports both of these ashub-onlyfindings onptr727/HomeAutomation-Configon every run, currentmainincluded:Read both -- they're genuinely this repo's own content at paths the hub also hosts, matching the existing
acceptedpattern already used forLICENSE,TODO.md,.husky/pre-commit, andscripts/README.mdin the samegapsarray:.github/actionlint.yaml: this repo's ownself-hosted-runnerlabels (homelab,ubuntu-24.04) for its self-hosted CI runner -- entirely different content from the hub's own.github/actionlint.yaml, which configures$/self-reference ignore rules for the hub's own workflows..github/actions/validate/action.yml: this repo's own override of the interface-workflow validate hook (WORKFLOW.md's "Interface workflows" contract), running CloudInit's nested Python project through uv/ruff/pyright/pytest. The hub's own file at this same path is a different override -- its own registry/spec self-test suite. Per WORKFLOW.md, this is exactly the intended override mechanism: a repo declaring its own.github/actions/validate/action.ymlis the documented way to plug a repo-specific validate hook into the sharedvalidate-task.yml, not drift to reconcile.There's no
spec/divergences.jsongaps entry for either path, so they stay untriaged and keep re-surfacing as findings with no way to close them out, unlike the four already-acceptedpaths above.Suggested fix
Add two
acceptedentries tospec/divergences.json'sgapsarray, one per path, with a reason along the lines of "this repo's own content at a shared/interface path" (matching the existingacceptedentries' shape), or -- for.github/actions/validate/action.ymlspecifically, since it's the documented interface-workflow override point named inWORKFLOW.mdsection 3 ("Interface workflows... Honor the named contract... rather than copying bytes") -- consider whether the detector should exempt interface-workflow override paths generically rather than needing a per-repogapsentry for each repo that overrides one.audit run 2026-08-25T13:46:24Z | hub fa63163