Skip to content

Re-audit Blog against the hugo type and bump the conformance matrix - #571

Merged
ptr727 merged 2 commits into
developfrom
report/blog-reaudit-and-matrix
Aug 5, 2026
Merged

Re-audit Blog against the hugo type and bump the conformance matrix#571
ptr727 merged 2 commits into
developfrom
report/blog-reaudit-and-matrix

Conversation

@ptr727

@ptr727 ptr727 commented Aug 5, 2026

Copy link
Copy Markdown
Owner

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 AUDIT.md section 8.

Run stamp audit run 2026-08-05T21:57:38Z | hub 01507a0, read at Blog main@2b132e4. Verdict operational, no defect.

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:

Issue What it was What closed it
ptr727/Blog#27 The remote release tree was never pruned A host timer owns the prune, recorded at OPERATIONS.md:170 with its count and the reason the deploy path does not prune
ptr727/Blog#28 The vendored theme recorded no upstream ref themes/README.md:10-16 records the repository, commit, date, describe form, and license, kept outside the vendored directory so an update does not take the record with it
ptr727/Blog#29 The generator pin was duplicated across two workflows One composite action both callers use, with no overridable input, so agreement is structural rather than asserted

hugo.deploy.retention takes 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 that deploy/make-release.sh does 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.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 that 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 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 Bootstrap block 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.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, 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, 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.py clean on the report and on every line changed in the matrix. markdownlint-cli2 clean over reports/**/*.md. editorconfig-checker clean over the tree, after converting the new report to CRLF to match the [*] default. spec/validate.py reports 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 driftNotes that all describe live deviations.

🤖 Generated with Claude Code

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>
Copilot AI lite review requested due to automatic review settings August 5, 2026 22:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.md with the 2026-08-05 audit run, including per-check Hugo evidence and updated drift/escalation notes.
  • Update the hugo row in reports/conformance-matrix.md with 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.

Comment thread reports/blog/audit.md Outdated
Comment thread reports/conformance-matrix.md Outdated
…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>
Copilot AI review requested due to automatic review settings August 5, 2026 22:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

@ptr727
ptr727 merged commit 9d14e0f into develop Aug 5, 2026
7 checks passed
@ptr727
ptr727 deleted the report/blog-reaudit-and-matrix branch August 5, 2026 22:33
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants