Declare the Publisher and Validator Workflows at Intent Fidelity - #736
Merged
Conversation
Replaces the accepted disposition with the one the maintainer chose. The earlier call ruled out interface fidelity correctly, then wrongly concluded nothing could be declared, which silenced the finding and stopped the audit measuring either file again. intent is the tier that fits: presence asserted, equivalence judged by hand against the intentRef, and a staleness advisory when the hub's copy moves past a carrier's. That is what keeps a copy close to the canonical rather than merely present. publish-release.yml applies to the three publishing releaseTrigger values, which is exact: every repo lacking one carries releaseTrigger none, and all 18 carriers carry a publishing trigger. The earlier claim that no selector separates them was wrong. validate-task.yml applies to * by decision, making the reusable validation task the fleet standard. The 8 repos that inline validation into test-pull-request.yml now carry a presence finding, which is the convergence asked for. Measured over the fleet: 0 false absences for the publisher, 8 absences for the validator, and 30 staleness advisories. 17 of those are against a Dependabot pin bump in the hub, a false class filed as #735. Both ledger rows are deleted, a declared file being no longer a gap.
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the fleet manifest to declare .github/workflows/publish-release.yml and .github/workflows/validate-task.yml at intent fidelity (instead of treating them as accepted gaps), so they remain measured for presence and receive staleness advisories when the hub canonical advances.
Changes:
- Add intent-fidelity declarations for
validate-task.yml(fleet-wide) andpublish-release.yml(scoped byreleaseTrigger) inspec/files.json. - Remove the prior “accepted gap” ledger entries for those workflows from
spec/divergences.jsonand regeneratereports/divergences.mdaccordingly. - Update the PlexCleaner audit report to reflect the new audit run stamps and the resulting advisory interpretation.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| spec/files.json | Declares validate-task.yml and publish-release.yml as intent-fidelity baseline files with intent references and scope selectors. |
| spec/divergences.json | Removes the prior gap dispositions for the two workflow files (no longer gaps once declared). |
| reports/plexcleaner/audit.md | Updates the narrative and run stamps to reflect the new intent declarations and advisory handling. |
| reports/divergences.md | Regenerated output reflecting the removal of the two workflow gap entries. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 15, 2026
Open
ptr727 added a commit
that referenced
this pull request
Aug 15, 2026
…xes (#741) Promotes `develop` to `main`. Two commits since #734, both governance rather than tooling, and the trial merge is conflict-free. Closes#737Closes#738 ## #736, the publisher and validator declared at intent fidelity `spec/files.json` gains `.github/workflows/publish-release.yml` and `.github/workflows/validate-task.yml`, and the two matching `investigate` rows leave `spec/divergences.json`, a declared file being no longer a gap. This reverses the call #732 shipped. That change settled both as `accepted`, which silences the finding and stops the audit measuring either file again, and the maintainer caught that as the opposite of what the fleet wants for them. `interface` genuinely does not fit, since job keys and triggers are per-repo across every carrier, but `intent` does: presence asserted, equivalence judged by hand, and a staleness advisory when the hub's copy moves past a carrier's. Scope is measured rather than assumed. The publisher applies to the three publishing `releaseTrigger` values, which selects exactly the 18 carriers, since every repository lacking one carries `releaseTrigger: none`. The validator applies to `*` by decision, making the reusable validation task the fleet standard. What promoting this turns on, fleet-wide, measured in one run at `audit run 2026-08-15T17:35:45Z | hub 0713008`: 0 absences for the publisher, 8 for the validator (homeassistant-purpleair, KiCadLibrary, EspDinIoT, ESPHome-Config, HomeAssistant-Config, DevKitCIoT, Vantage-Config, HolidayLights), and 30 staleness advisories. 17 of those 30 are a known false class, since the advisory has no action-pin normalization and the hub's publisher last changed in a Dependabot bump, filed as #735. `reports/plexcleaner/audit.md` is updated in the same commit, since it is the report the earlier settlement was written into. ## #740, two carried-wording fixes Both raised by Copilot against a carried copy on ptr727/ESPHome-Config#94, and both are the same failure: a faithful copy makes every carrier re-litigate one finding. - **#737**: the `GOVENANCE.md` quotation now reads as quoted ("the reviewer's own spelling and a path no diff carries") in the three Markdown occurrences. The misspelling stays literal, because it is the evidence for the sentence it sits in. - **#738**: the `AGENTS.md` sentence named no sections and read as "none of this file is editable". It now names the three byte-locked sections and states that the preamble above them is the repository's own. ## Verification Run against `develop` at `7c67328`: whole-tree prose gate, `repo_gate.py` (eol, eol-coverage, sha-pin), `spec/validate.py`, `spec/audit.py --selftest`, `build_dist.py --check`, markdownlint, and editorconfig-checker all pass. `git merge-tree` of `main` and `develop` is conflict-free, so there is no EOL-only conflict to resolve on this promotion.
ptr727 added a commit
that referenced
this pull request
Aug 15, 2026
…nc (#739) Follow-up to #723 after ptr727/PhotoCleaner#51 promoted `develop` to `main` (`f56178a`), carrying ptr727/PhotoCleaner#50 and ptr727/PhotoCleaner#52. `spec/audit.py PhotoCleaner` at hub `b09078e` reports **clean** at `main` (`audit run 2026-08-15T18:43:20Z | hub b09078e`) and at `develop`, including the two hub-only workflow findings that #736 settled. The report moves to **operational**: `readme-structure` and `agent-instruction-set` to pass, no defects, no drift, nothing in flight. It records the one-round `dead-path` block on the promotion (#721, fixed by #731, cleared by a re-run since the gate reads rules from hub `develop`) and closes both escalations (#721, #722). The registry entry is unchanged: `status` stays `cataloged` (the schema's only non-backlog value) and both `driftNotes` still describe reality (publish shape, private-for-now) and assert no outstanding work. Report lints clean (markdownlint, prose_lint), and `spec/validate.py` passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #732, which settled
.github/workflows/publish-release.ymland.github/workflows/validate-task.ymlasacceptedgaps. That call was wrong and this reverses it.What was wrong
acceptedmeans "a path collision, the repo's own file", and its effect is to silence the finding and stop the audit measuring either file ever again. The fleet's intent for these two is the opposite: carry the hub's copy as closely as each repository's targets allow, so a diff against the canonical stays small and readable.The reasoning behind #732 tested both files against
interfacefidelity, found correctly that no named contract fits (job keys and triggers are genuinely per-repo), and then concluded that nothing could be declared. That skippedintent, which is exactly the tier for this: presence asserted, equivalence judged by hand against theintentRef, content never hashed, and a staleness advisory raised when the hub's canonical moves past a carrier's copy.The
appliesToclaim was also wrong for the publisher. Re-measured: every repository lacking one carriesreleaseTrigger: none(AudioCleaner, HolidayLights, EspDinIoT, DevKitCIoT), and all 18 carriers carry a publishing trigger. That is an exact selector, and it states something true, namely that a repository which publishes a release has a publisher.What this does
{ "path": ".github/workflows/validate-task.yml", "fidelity": "intent", "intentRef": "WORKFLOW.md#d1---pr-fast-feedback-smoke", "appliesTo": "*" }, { "path": ".github/workflows/publish-release.yml", "fidelity": "intent", "intentRef": "WORKFLOW.md#d4---release--publish", "appliesTo": ["two-phase", "dispatch-only", "publish-on-merge"] }Both ledger rows are deleted, since a declared file is no longer a gap and
fidelity_honesty.pydrops such a row from the generated report by construction.The validator is declared fleet-wide by decision rather than by measurement: no selector separates its carriers from the repositories that inline validation into
test-pull-request.yml, and the maintainer's call is that the reusable task is the fleet standard. The skill text already reads that way, namingpublish-release.ymlin the orchestration layer that is "the standardization baseline".Measured impact, whole fleet
One full audit run at
audit run 2026-08-15T17:35:45Z | hub 0713008:publish-release.ymlvalidate-task.yml1892d6f), so every carrier trips at once on drift the fidelity model already calls governed and per-repo. Filed as The intent staleness advisory has no action-pin normalization, so a Dependabot bump marks every downstream copy as trailing #735 with three options.0d18078, which addedruff format --check. Real content, though a repository that adopted the same step independently still reports as trailing, which is why the tier is an advisory and not a verdict.PlexCleaner report
reports/plexcleaner/audit.mdis updated in place, since it is the report this settlement was written into. Its two new advisories are read and retired in Drift Finding 6: the validator copy already runsruff format --checkat a pinned version, and the publisher advisory is the pin-bump class above. Verdict is unchanged at operational.Verified:
spec/validate.py,spec/audit.py --selftest(which asserts no declared path leaks into the hub-only set),scripts/repo_gate.py, the whole-tree prose gate, markdownlint, and editorconfig-checker all pass.