Re-audit Blog against the hugo type and bump the conformance matrix - #571
Merged
Conversation
The 2026-08-03 report graded Blog as source-only against a hub that had no static-site type, and it recorded that it was due a re-run once the deploy existed. This is that run, replacing the file in whole rather than editing it, per the run-stamp discipline in AUDIT.md section 8. Run stamp `audit run 2026-08-05T21:57:38Z | hub 01507a0`, read at Blog `main@2b132e4`. Verdict operational, no defect. ## What is judged for the first time All nine `hugo.*` checks, each cited to file:line. They pass. The three deviations the first run recorded are closed: ptr727/Blog#27 (the remote release tree was never pruned), #28 (the vendored theme recorded no upstream ref), and #29 (the generator pin was duplicated across two workflows). Two drift classes stay open, both of them the hub having advanced past what the repo carries: seven stale verbatim units and 17 prose findings. Four of the seven are substantive rule additions rather than the Markdown-capitalization settlement, and one of those needs sequencing. The `Closes #N` rule moved out of Release Model into Branching Model in #563, so a re-vendor taking the new Release Model without also taking the new Branching Model drops the rule instead of leaving it stale. ## A hub defect the run surfaced `spec/audit.py` lines 691-695 flag a carried file that names the hub anywhere in it. The check has no exemption for `AGENTS.md > Fleet Bootstrap`, which is byte-locked and whose first sentence names the hub by path, because saying where the canonical rules live is the section's entire function. Blog's line 11 is byte-identical to this repo's own `AGENTS.md:11` and is the file's only occurrence. The finding is therefore unclearable by construction: satisfying the check means altering a section the verbatim check would then flag. It is not specific to Blog either. It fires on any repo that has carried the current canonical and spreads as the carry propagates. Recorded as escalation 1 with the fix, which is to scan the file with the Fleet Bootstrap block excised so a reference outside it is still caught. Not counted against Blog's verdict. Two further escalations: a downstream repo holding a report at the hub's own `reports/<repo>/audit.md` path, which section 8 does not address, and the unclassified COPYRIGHT SIGN carried unchanged from the first run. ## The matrix The `hugo` row takes this run's date and findings. Ten clause-joining semicolons and three spaced hyphens elsewhere in the file are fixed in the same pass rather than stepped around. The 17 remaining `dash` findings are deliberately left. Every one is a `| - |` empty-table-cell placeholder, which is the notation the file's own header documents, so they are a `prose_lint.py` exemption gap rather than divergent content. The gap is systemic, 46 such cells across 8 report files, and a sweep to satisfy the checker would damage every one of them. Two of the semicolons fixed here are ones the checker missed, so the exemption cuts both ways. Reported rather than patched, since changing the checker needs its own change with an old-versus-new verdict diff. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the hub’s documentation evidence for the Blog repository by replacing its audit report with a 2026-08-05 re-run (now evaluated against the hugo type) and refreshes the conformance matrix row to reflect that run.
Changes:
- Replace
reports/blog/audit.mdwith the 2026-08-05 audit run, including per-check Hugo evidence and updated drift/escalation notes. - Update the
hugorow inreports/conformance-matrix.mdwith the new audit date and updated notes, plus small prose tweaks in the matrix header text.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| reports/conformance-matrix.md | Updates the Blog (hugo) row audit date/notes and tightens explanatory prose for shapes/targets. |
| reports/blog/audit.md | Replaces the Blog audit report with the 2026-08-05 run, expanding Hugo-dimension evidence and revising drift/escalations accordingly. |
…e cross-repo issue refs Both from the Copilot review on #571. The escalation about a downstream repo holding its own audit report claimed the two files sit at the same relative path. They do not. The hub's is `reports/blog/audit.md` and the downstream one is `reports/Blog/audit.md`, differing in the case of one directory, so the claim overstated the collision it was raising. The review read this as a typo in the citation and asked for the lowercase form. That fix would have been wrong in the other direction, because the downstream path really is capital-B and lowercasing the citation would misquote the repo being audited. What was actually wrong was the sentence around it, so the escalation now names the case difference and says why it makes the confusion worse rather than better: it is invisible on a case-insensitive filesystem, and a reader takes it for a typo rather than for a boundary. The matrix abbreviated two of three cross-repo issue references to bare `#28` and `#29` after a qualified `ptr727/Blog#27`. In a hub document a bare reference is a hub reference, which is the file's own convention for #339, #456, and #558. The ambiguity is concrete rather than theoretical: ProjectTemplate #27, #28, and #29 all exist, so the bare forms rendered as links to unrelated merged pull requests in this repo. All three are fully qualified now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ptr727
added a commit
that referenced
this pull request
Aug 6, 2026
Found by the Blog re-audit in #571 and recorded there as escalation 1. ## The contradiction The rule bans a reference to the template repo in any carried file, because the coordination flow is machinery a consumer should not see. `AGENTS.md` "Fleet Bootstrap" is byte-locked fleet-wide and its first sentence names the hub by path, because saying where the canonical rules live is that section's entire function. It is what an agent reads in a repository whose carried copies are stale, partial, or absent, which is precisely when nothing else present can say it. The two rules therefore contradicted each other. A repository carrying the current canonical was flagged for holding a section the hub requires it to hold, byte for byte, and the only way to clear the finding was to edit that section and fail the verbatim check instead. **The finding was unclearable by construction, and it was going to spread rather than stay a curiosity**, since every repository picks it up as the carry propagates. Two repositories had reached it already. ## Three surfaces stated the rule, so three change | Surface | Change | | --- | --- | | `spec/audit.py` | A new `template_ref_outside_verbatim` helper excises a file's verbatim sections before looking for the name | | `GOVERNANCE.md` "Documentation Style Conventions" | Carries the exception, its reason, and its boundary | | `recurring.norepoxref` in `spec/project-types.json` | The same, since that is the check an auditor judges by hand | A tool fix that left the written rule contradicting it would have fixed nothing, which is why all three move together. The exemption is **derived from the declared verbatim list rather than hardcoded to one heading**, so a future verbatim section that must name the hub is covered without a second fix. **The exception stops at the region boundary.** A repository naming the destination in prose it owns is still flagged, which is the point. A reference that reaches a verbatim section is a defect in the canonical, fixed once at the source rather than reported against every repository carrying it. ## Verification **Six offline cases in `--selftest`**, covering the exempt and non-exempt positions, a document with nothing declared verbatim, a re-cased heading, and a CRLF document. The last matters because `extract_section` normalizes EOLs while carried files are CRLF on this fleet, so excision has to survive that. **Old versus new predicate across all 21 non-hub cataloged repositories.** It clears exactly two findings, both `AGENTS.md`, on the two repositories carrying the current Fleet Bootstrap, and keeps the other eleven: ```text HomeAutomation-Config AGENTS.md True False <== CLEARED Blog AGENTS.md True False <== CLEARED Utilities .github/copilot-instructions.md True True kept NxWitness AGENTS.md True True kept ... (11 kept) ``` Live runs agree. Blog loses the false positive with its seven genuine verbatim drifts unchanged, and Utilities keeps its genuine one. ## Incidental The scan moved into the file loop, so it reads content already fetched for the section checks instead of re-fetching all three files per repository, and reads the same selector-resolved verbatim list those checks were judged against. The conformance matrix note claiming the check has no exemption is updated in the same pass rather than left to contradict the code. The Blog report is deliberately **not** edited: it is a point-in-time run snapshot, and the run-stamp discipline in AUDIT.md section 8 says a later run supersedes the file rather than an edit revising it. Note that `GOVERNANCE.md` "Documentation Style Conventions" is verbatim fleet law, so every downstream repository's copy goes stale on merge and is due a re-vendor. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
ptr727
added a commit
that referenced
this pull request
Aug 6, 2026
…574) Promotes the nine commits `develop` has carried since the previous promotion (#555) to `main`. Merge commit only, no squash, and `develop` is not deleted. ## What lands - **#560** Standardize the static-site-deploy repo type and its destination, including the deploy-verification guarantee and a retention rule that records which side owns the prune. - **#561** Ask for a blocked decision instead of reporting it, and scope the clickable-link rule to a surface that renders markdown. - **#564** Read a suppressed section nested inside the review-details wrapper, so `scripts/pr_review.py` stops reporting a clean round over findings that reach no thread. - **#566** Settle Markdown capitalization in `CODESTYLE.md`, and fix the two `TODO.md` prose defects the digest defect had hidden. - **#568** Check a `driftNote` on every run rather than only on an otherwise clean audit, and state what the audit does not evaluate. - **#569** Name who trips the production ref gate, and state that a harness refusal is a different thing from the maintainer's permission and is not lifted by it. - **#571** Re-audit `ptr727/Blog` against the hugo type and bump the conformance matrix. - **#573** Scope the semicolon exemption to the sentence its list lives in, with the 44 newly reported occurrences recorded on #519 rather than swept here. - **#572** Exempt a verbatim section from the coordination-reference scan. ## Issues closed Fixes #562. Closes #565. The closing keywords sit on this promotion rather than on the feature pull requests, because GitHub fires them only on a merge into the default branch. #456, #558, #563, #567, and #570 are already closed against their merged fixes. ## Verification `git merge-tree` reports no conflict between `origin/main` and `origin/develop`, so this promotion needs no throwaway resolution branch. Every constituent pull request merged green with its review loop closed.
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 free
to 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.
The 2026-08-03 report graded Blog as
source-onlyagainst a hub that had no static-site type, and it recorded that it was due a re-run once the deploy existed. This is that run, replacing the file in whole rather than editing it, perAUDIT.mdsection 8.Run stamp
audit run 2026-08-05T21:57:38Z | hub 01507a0, read at Blogmain@2b132e4. Verdict operational, no defect.Judged for the First Time
All nine
hugo.*checks, each cited tofile:line. They pass. The three deviations the first run recorded are closed:OPERATIONS.md:170with its count and the reason the deploy path does not prunethemes/README.md:10-16records the repository, commit, date, describe form, and license, kept outside the vendored directory so an update does not take the record with ithugo.deploy.retentiontakes the second of the two D5.6 shapes, which is the correct one here: the deploy credential is confined write-only and cannot observe the destination, so an in-pipeline assertion would mean widening it. Note thatdeploy/make-release.shdoes prune, but in CI it runs against a scratch bundle path, so it satisfies nothing on its own and the host timer is what the verdict rests on.Develop drift is benign: behind 6, ahead 0, identical trees.
Two Drift Classes Stay Open
Both are the hub having advanced past what the repo carries, not anything the repo did. Seven stale verbatim units and 17 prose findings, each read rather than counted.
Three of the seven differ from the canonical only in the case of the word Markdown (#566). The other four are rule additions the repo states in an older form, from #569, #561, #560, and #563.
One needs sequencing. The issue-closing-keyword rule moved out of Release Model into Branching Model in #563. A re-vendor that takes the new Release Model without also taking the new Branching Model drops the rule entirely rather than leaving it stale.
A Hub Defect the Run Surfaced
spec/audit.pylines 691-695 flag a carried file that names the hub anywhere in it. The check has no exemption forAGENTS.md > Fleet Bootstrap, which is byte-locked and whose first sentence names the hub by path, because saying where the canonical rules live is that section's entire function. Blog's line 11 is byte-identical to this repo's ownAGENTS.md:11and is the file's only occurrence.The finding is unclearable by construction: satisfying the check means altering a section the verbatim check would then flag. It is not specific to Blog. It fires on any repo that has carried the current canonical, so it spreads as the carry propagates rather than staying a single-repo curiosity. Recorded as escalation 1 with the fix, which is to scan the file with the
Fleet Bootstrapblock excised so a reference outside it is still caught. Not counted against Blog's verdict, and not fixed here, since it is a change to the runner rather than to a report.Two further escalations: a downstream repo holding a report at the hub's own
reports/<repo>/audit.mdpath, which section 8 does not address, and the unclassified COPYRIGHT SIGN carried unchanged from the first run.The Matrix
The
hugorow takes this run's date and findings. Ten clause-joining semicolons and three spaced hyphens elsewhere in the file are fixed in the same pass rather than stepped around.The 17 remaining
dashfindings are deliberately left. Every one is a| - |empty-table-cell placeholder, the notation the file's own header documents, so they are aprose_lint.pyexemption gap rather than divergent content. The gap is systemic, 46 such cells across 8 report files, and a sweep to satisfy the checker would damage every one of them. Two of the semicolons fixed here are ones the checker missed, one inside parentheses and one suppressed by the colon-in-row exemption, so the exemption cuts both ways. Reported rather than patched, because changing the checker needs its own change with an old-versus-new verdict diff.Verification
prose_lint.pyclean on the report and on every line changed in the matrix. markdownlint-cli2 clean overreports/**/*.md. editorconfig-checker clean over the tree, after converting the new report to CRLF to match the[*]default.spec/validate.pyreports 22 cataloged and 0 backlog repos classifying cleanly. Reference-link integrity checked in both files: no undefined references, no unused definitions, no inline targets, and every local path resolves.Documentation only. No behavior change, and no registry edit: the entry already declares both types, both publish targets, and four
driftNotesthat all describe live deviations.🤖 Generated with Claude Code