Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 31 additions & 32 deletions reports/divergences.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,60 +6,59 @@ Generated by `python3 spec/fidelity_honesty.py --report` - do not hand-edit. Cur

### re-vendor

- **.markdownlint-cli2.jsonc** - AudioCleaner, PhotoCleaner, aiopurpleair - Verbatim config held as a hand-modified copy rather than a past hub revision. Restore the current canonical.
- **.markdownlint-cli2.jsonc** - AudioCleaner, aiopurpleair _(recorded PhotoCleaner now resolved)_ - Verbatim config held as a hand-modified copy rather than a past hub revision. Restore the current canonical.

### investigate

- **pyproject.toml** (manifest gap, carried by Financial-Modeling, aiopurpleair, homeassistant-purpleair) - The hub gained a config-only Scripts-profile pyproject.toml in #388. Decide whether to track it (intent, appliesTo python) after confirming the python repos carry an equivalent.

### retire

- **repo-config/configure.sh** (manifest gap, carried by ESPHome-NonRoot, Financial-Modeling, HomeAssistant-Config, LanguageTags, NxWitness, PhotoCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair) - The script is hub-hosted rather than carried, per GOVERNANCE.md "Hub-Hosted Tooling", so it is no longer a manifest entry and a downstream copy is retired rather than re-vendored. Every copy the fleet holds is the hub's content with nothing per-repo in it, and the copies predate the payload-driven check mode, which is the drift this removes rather than converges. Delete the copy as each repo is next visited and run the hub's script against the repo instead. The carriers are not enumerated in this ledger entry, because the fleet-wide gap pass names them from live state in the generated report and a hand-kept list understated them: it read six while fifteen repos carry one. The ruleset payloads and settings.json stay carried, since those are what the repo is audited against and what its own AUDIT.md diffs the live configuration against.
- **repo-config/configure.sh** (manifest gap, carried by ESPHome-NonRoot, LanguageTags, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair) - The hub hosts the repository-configuration script. A downstream repository runs the hub's main copy against its repository name and workflow model.
- **repo-config/develop.json** (manifest gap, carried by MediaTools, PhotoCleaner, PlexCleaner, Utilities) - The hub hosts the release-model develop ruleset payload. A downstream repository is checked against the hub's main payload.
- **repo-config/operational/develop.json** (manifest gap, carried by ESPHome-Config, HomeAssistant-Config, Vantage-Config) - The hub hosts the operational-model develop ruleset payload. A downstream repository is checked against the hub's main payload.
- **repo-config/main.json** (manifest gap, carried by ESPHome-Config, HomeAssistant-Config, MediaTools, PhotoCleaner, PlexCleaner, Utilities, Vantage-Config) - The hub hosts the shared main ruleset payload. A downstream repository is checked against the hub's main payload.
- **repo-config/settings.json** (manifest gap, carried by ESPHome-Config, ESPHome-NonRoot, HomeAssistant-Config, LanguageTags, NxWitness, PhotoCleaner, PlexCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair) - The hub hosts the shared repository settings payload. A downstream repository is checked against the hub's main payload.
- **repo-config/README.md** (manifest gap, carried by ESPHome-Config, ESPHome-NonRoot, HomeAssistant-Config, LanguageTags, NxWitness, PhotoCleaner, PlexCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair) - The hub hosts the repository-configuration reference beside the payloads and script it documents.
- **.github/workflows/build-release-task.yml** (manifest gap, carried by ESPHome-NonRoot, KiCadLibrary, LanguageTags, MediaTools, PlexCleaner, Utilities, VSCode-Server-DotNetCore, aiopurpleair, homeassistant-purpleair) - The release chain is hub-hosted as a workflow_call task, per docs/reusable-workflows.md "Stage 4: The Release Chain and the Docker Core", so a downstream copy of this filename is retired rather than re-vendored: the caller stub a repo carries after adoption is publish-release.yml and test-pull-request.yml calling the hub task by pin, and no adopting repo carries a same-named local file. The ten carriers measured on develop at hub 7c67328 are PhotoCleaner, PlexCleaner, LanguageTags, MediaTools, Utilities, aiopurpleair, ESPHome-NonRoot, VSCode-Server-DotNetCore, KiCadLibrary, and homeassistant-purpleair. Delete the copy as each repo adopts the hub task; adoption is a separate, later change per repo (docs/reusable-workflows.md "Rollout" Stage 4).
- **.github/workflows/build-docker-task.yml** (manifest gap, carried by ESPHome-NonRoot, NxWitness, PlexCleaner, VSCode-Server-DotNetCore) - The Docker core is hub-hosted as its own workflow_call task alongside build-release-task.yml, per docs/reusable-workflows.md "Stage 4: The Release Chain and the Docker Core", so a downstream copy of this filename is retired rather than re-vendored the same way. The five carriers measured on develop at hub 7c67328 are ESPHome-NonRoot, NxWitness, PhotoCleaner, PlexCleaner, and VSCode-Server-DotNetCore. Delete the copy as each repo adopts the hub task; adoption is a separate, later change per repo (docs/reusable-workflows.md "Rollout" Stage 4).
- **.github/workflows/get-version-task.yml** (manifest gap, carried by ESPHome-NonRoot, KiCadLibrary, NxWitness, PlexCleaner, VSCode-Server-DotNetCore, aiopurpleair, homeassistant-purpleair) - The task is hub-hosted rather than carried, per GOVERNANCE.md "Hub-Hosted Tooling", so it is no manifest entry and a downstream copy is retired rather than re-vendored. Every copy is the hub's own NBGV logic with nothing per-repo in it beyond the action pins Dependabot already owns. The carriers, read from the fleet on 2026-08-15, are ESPHome-NonRoot, NxWitness, PhotoCleaner, PlexCleaner, VSCode-Server-DotNetCore, KiCadLibrary, aiopurpleair, and homeassistant-purpleair. Delete the copy and reach the hub task by pin as each repo is next visited, per docs/reusable-workflows.md "Adopting the Pure Functions".
- **.github/workflows/publish-plan-task.yml** (manifest gap, carried by ESPHome-NonRoot, NxWitness, Utilities) - The task is hub-hosted rather than carried, per GOVERNANCE.md "Hub-Hosted Tooling", so it is no manifest entry and a downstream copy is retired rather than re-vendored. The carriers, read from the fleet on 2026-08-15, are ESPHome-NonRoot, NxWitness, and Utilities, and all three carry a strict subset of the canonical, missing the -E in set -Eeuo pipefail and the ::warning:: branch for an unrecognized actor pushing to main (WORKFLOW.md D8.4). Delete the copy and reach the hub task by pin as each repo is next visited, per docs/reusable-workflows.md "Adopting the Pure Functions".
- **.github/workflows/validate-task.yml** (manifest gap, carried by AudioCleaner, ESPHome-NonRoot, LanguageTags, MediaTools, NxWitness, PlexCleaner, Utilities, VSCode-Server-DotNetCore, aiopurpleair) - The file is hub-hosted as a workflow_call task rather than carried, per GOVERNANCE.md "Hub-Hosted Tooling" and docs/reusable-workflows.md "Stage 2: The Gates". The fleet doc-lint block, the language lint, the prose gate, and the repo gate move into the hub task, and a repo's own domain checks move into its own .github/actions/validate/action.yml hook instead, so a downstream copy is retired rather than re-vendored. The thirteen repos carrying a copy today are PhotoCleaner, PlexCleaner, LanguageTags, Utilities, MediaTools, AudioCleaner, aiopurpleair, Financial-Modeling, Blog, ESPHome-NonRoot, NxWitness, VSCode-Server-DotNetCore, and HomeAutomation-Config. Delete the copy and adopt the caller stub in docs/reusable-workflows.md "Adopting the Gates" as each repo is next visited.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
- **.github/workflows/publish-docker-readme-task.yml** (manifest gap, carried by VSCode-Server-DotNetCore) - The task is hub-hosted per docs/reusable-workflows.md "The Docker Family", so a downstream copy of the job graph is retired rather than converged. The carrier is VSCode-Server-DotNetCore, whose copy replaces with the caller stub in docs/reusable-workflows.md "Adopting the Type-Specific Tasks" once a release carries the task.
- **.github/workflows/check-upstream-version-task.yml** (manifest gap, carried by ESPHome-NonRoot) - The task is hub-hosted per docs/reusable-workflows.md "The Docker Family", so a downstream copy of the job graph is retired rather than converged. The carrier is ESPHome-NonRoot, whose check-upstream-version.yml caller and check-upstream-version-task.yml body both replace with the caller stub once a release carries the task. Its second tracker, check-upstream-dependency.yml, is a candidate to fold into the same hub task with auto-merge false, tracked as an adoption note rather than a gap here since it was never a copy of this snippet.
- **.github/workflows/run-codegen-pull-request-task.yml** (manifest gap, carried by LanguageTags, NxWitness) - The task is hub-hosted per docs/reusable-workflows.md "Adopting the Type-Specific Tasks", so a downstream copy of the job graph is retired rather than converged. The carriers are LanguageTags and NxWitness, each replacing its copy with a codegen hook plus the caller stub once a release carries the task.

### accepted

- **.editorconfig-checker.json** - HolidayLights _(recorded HomeAutomation-Config now resolved)_ - Both carry a legitimate repo-specific Exclude list (HomeAutomation-Config excludes a Vantage/ subtree, HolidayLights excludes .fseq sequence files). The uniform Disable block is carried intent-equivalent. Exclude is inherently repo-local, which is why the unit is intent, not verbatim.
- **LICENSE** (manifest gap, carried by AudioCleaner, Blog, DevKitCIoT, ESPHome-Config, ESPHome-NonRoot, EspDinIoT, Financial-Modeling, HomeAssistant-Config, HomeAutomation-Config, KiCadLibrary, LanguageTags, MediaTools, NxWitness, PhotoCleaner, PlexCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair) - Each repo owns its license file. The hub does not standardize license text, so it is intentionally outside the manifest.
- **TODO.md** (manifest gap, carried by Blog, HomeAutomation-Config) - A repo's own running backlog, which STANDUP.md section 2 names as one of the four declared destinations for repo-specific content. It is advisory and required by no selector, so the manifest deliberately does not declare it and a repo's copy is its own content rather than a carry.
- **TODO.md** (manifest gap, carried by Blog, Financial-Modeling, HomeAssistant-Config, HomeAutomation-Config) - A repo's own running backlog, which STANDUP.md section 2 names as one of the four declared destinations for repo-specific content. It is advisory and required by no selector, so the manifest deliberately does not declare it and a repo's copy is its own content rather than a carry.
- **.husky/pre-commit** (manifest gap, carried by AudioCleaner, LanguageTags, MediaTools, NxWitness, PhotoCleaner, PlexCleaner, Utilities) - A path collision rather than a carry. Each repo's hook runs that repo's own language formatters, and the hub's runs the doc gates, so the seven downstream copies share the path and none of the content: LanguageTags and Utilities run language formatting and style with no Docker, PlexCleaner runs CSharpier and dotnet format, and the hub runs prose_lint.py and repo_gate.py. Verified by reading the downstream copies on 2026-08-10.
- **scripts/README.md** (manifest gap, carried by KiCadLibrary) - A path collision rather than a carry. KiCadLibrary's copy documents its own KiCad tooling (common.py, verify_library.py, build_library.py) beside the scripts it describes, and shares nothing with the hub's fleet-gate documentation. Verified by reading it on 2026-08-10. scripts/ is a generic path, so a repo with its own tooling directory matches this check without carrying anything of the hub's.
- **.github/actionlint.yaml** (manifest gap, carried by HomeAutomation-Config) - A path collision rather than a carry. HomeAutomation-Config's own copy declares self-hosted-runner labels (homelab, ubuntu-24.04) for its self-hosted CI runner, entirely different content from the hub's own file at this path, which configures $/ self-reference ignore rules for the hub's own workflows. Verified by reading both copies on 2026-08-25.
- **.github/actions/validate/action.yml** (manifest gap, carried by Blog, ESPHome-Config, Financial-Modeling, HomeAutomation-Config) - A path collision rather than a carry. HomeAutomation-Config's own copy overrides the interface-workflow validate hook, per RESYNC.md 'Apply, in This Order' item 4, 'Interface workflows': 'Honor the named contract... rather than copying bytes. The body is the repository's own.' It runs its CloudInit/ 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. A repo declaring its own .github/actions/validate/action.yml is the documented, intended override mechanism, not drift to reconcile. Verified by reading both copies on 2026-08-25.

## Untriaged - add a disposition to `spec/divergences.json`

- **AGENTS.md > Fleet Bootstrap** - **not carried** by AudioCleaner, DevKitCIoT, ESPHome-NonRoot, Financial-Modeling, HolidayLights, HomeAssistant-Config, KiCadLibrary, LanguageTags, MediaTools, NxWitness, PhotoCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair, so the section never arrived rather than being edited (verbatim canonical)
- **AGENTS.md > Context and Delegation Discipline** - **not carried** by AudioCleaner, DevKitCIoT, ESPHome-NonRoot, HolidayLights, HomeAssistant-Config, KiCadLibrary, LanguageTags, MediaTools, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair, so the section never arrived rather than being edited (verbatim canonical)
- **AGENTS.md > Where the Rules Live** - **not carried** by AudioCleaner, DevKitCIoT, ESPHome-NonRoot, HolidayLights, HomeAssistant-Config, KiCadLibrary, LanguageTags, MediaTools, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair, so the section never arrived rather than being edited (verbatim canonical)
- **GOVERNANCE.md > Representative Data in Agent-Authored Text** - **not carried** by Financial-Modeling, so the section never arrived rather than being edited (verbatim canonical)
- **GOVERNANCE.md > Hub-Hosted Tooling** - **not carried** by Financial-Modeling, PhotoCleaner, so the section never arrived rather than being edited (verbatim canonical)
- **.markdownlint-cli2.jsonc** - hand-modified in Financial-Modeling (verbatim canonical)
- **AGENTS.md > Fleet Bootstrap** - **not carried** by AudioCleaner, DevKitCIoT, ESPHome-NonRoot, HolidayLights, KiCadLibrary, LanguageTags, MediaTools, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair, so the section never arrived rather than being edited (verbatim canonical)
- **AGENTS.md > Context and Delegation Discipline** - **not carried** by AudioCleaner, DevKitCIoT, ESPHome-NonRoot, HolidayLights, KiCadLibrary, LanguageTags, MediaTools, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair, so the section never arrived rather than being edited (verbatim canonical)
- **AGENTS.md > Where the Rules Live** - **not carried** by AudioCleaner, DevKitCIoT, ESPHome-NonRoot, HolidayLights, KiCadLibrary, LanguageTags, MediaTools, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair, so the section never arrived rather than being edited (verbatim canonical)

## Mechanical re-vendor (verbatim stale copies)

A past hub revision, not the current canonical - the audit already flags these as DRIFT. Copy the current file down. No judgment needed.

- **AGENTS.md > Fleet Bootstrap** (2): Blog, ESPHome-Config
- **AGENTS.md > Context and Delegation Discipline** (1): Financial-Modeling
- **AGENTS.md > Where the Rules Live** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Foundational Principles** (1): Financial-Modeling
- **GOVERNANCE.md > Durable Knowledge and Self-Improvement** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Repository Boundaries and Write Safety** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Git and Commit Rules** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Branching Model** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Release Model** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Operational Repositories** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Hub-Hosted Tooling** (2): Blog, ESPHome-Config
- **GOVERNANCE.md > Pull Request Title and Commit Message Conventions** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Documentation Style Conventions** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Verification Discipline** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > PR Review Etiquette** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Communicating with the User** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Workflow YAML Conventions** (4): Blog, ESPHome-Config, Financial-Modeling, PhotoCleaner
- **GOVERNANCE.md > Supported Development Platforms** (1): Financial-Modeling
- **GOVERNANCE.md > Editor and Tasks** (1): Financial-Modeling
- **GOVERNANCE.md > Repository Details** (2): Financial-Modeling, PhotoCleaner
- **.markdownlint-cli2.jsonc** (14): DevKitCIoT, ESPHome-NonRoot, Financial-Modeling, HolidayLights, HomeAssistant-Config, KiCadLibrary, LanguageTags, MediaTools, NxWitness, PhotoCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, homeassistant-purpleair
- **repo-config/develop.json** (4): Financial-Modeling, MediaTools, PhotoCleaner, Utilities
- **repo-config/operational/develop.json** (2): HomeAssistant-Config, Vantage-Config
- **repo-config/main.json** (6): Financial-Modeling, HomeAssistant-Config, MediaTools, PhotoCleaner, Utilities, Vantage-Config
- **AGENTS.md > Context and Delegation Discipline** (2): PhotoCleaner, PlexCleaner
- **AGENTS.md > Where the Rules Live** (6): Blog, ESPHome-Config, Financial-Modeling, HomeAssistant-Config, PhotoCleaner, PlexCleaner
- **GOVERNANCE.md > Repository Boundaries and Write Safety** (2): PhotoCleaner, PlexCleaner
- **GOVERNANCE.md > Operational Repositories** (2): PhotoCleaner, PlexCleaner
- **GOVERNANCE.md > Hub-Hosted Tooling** (2): PhotoCleaner, PlexCleaner
- **GOVERNANCE.md > PR Review Etiquette** (5): ESPHome-Config, Financial-Modeling, HomeAssistant-Config, PhotoCleaner, PlexCleaner
- **GOVERNANCE.md > Workflow YAML Conventions** (6): Blog, ESPHome-Config, Financial-Modeling, HomeAssistant-Config, PhotoCleaner, PlexCleaner
- **GOVERNANCE.md > Repository Details** (5): ESPHome-Config, Financial-Modeling, HomeAssistant-Config, PhotoCleaner, PlexCleaner
- **.markdownlint-cli2.jsonc** (11): DevKitCIoT, ESPHome-NonRoot, HolidayLights, KiCadLibrary, LanguageTags, MediaTools, NxWitness, Utilities, VSCode-Server-DotNetCore, Vantage-Config, homeassistant-purpleair

## Promote candidates (intent uniform -> verbatim)

Expand Down