Skip to content

The template-reference check and the byte-locked Fleet Bootstrap section cannot both be satisfied #552

Description

@ptr727

spec/audit.py flags any downstream AGENTS.md containing the hub's name, and the byte-locked AGENTS.md > Fleet Bootstrap section contains it. A repository that carries the canonical correctly is therefore guaranteed to fail the check, and the only way to pass is to break the byte-lock.

Audited against hub main7194f91. Found on Blog immediately after it re-vendored Fleet Bootstrap from 3a7cc64 (ptr727/Blog#11), which is the first downstream repository to carry that section at all.

The two rules, both on main

spec/files.json declares the section verbatim:

{ "path": "AGENTS.md", "sections": [ { "name": "Fleet Bootstrap", "fidelity": "verbatim" }, ... ] }

The canonical text names the repository, and says so in its own words:

the canonical rules, machine-readable spec, and procedures live in github.com/ptr727/ProjectTemplate ... This section is byte-locked across every repository in the fleet, so it reads identically wherever it is found

spec/audit.py then flags exactly that, skipping only the hub:

ifentry.get("name") !=HUB_NAME:
forpathin ("AGENTS.md", "GOVERNANCE.md", ".github/copilot-instructions.md"):
...
if ... HUB_NAME.lower() in ...:
findings.append(("DRIFT", f"carried: {path} references the template repo ..."))

The comment above it reads "A downstream repo naming it is still flagged, which is the point." That intent is coherent on its own. It just cannot coexist with a byte-locked section whose whole purpose is to name the destination, since Fleet Bootstrap exists precisely to tell an agent where the rules live when nothing else present does.

Reproduction

$ python3 spec/audit.py --branch develop Blog DRIFT carried: AGENTS.md references the template repo by name or link (...)

Blog's AGENTS.md byte-matches the canonical Fleet Bootstrap, Context and Delegation Discipline, and Where the Rules Live, verified by hashing each ## heading block against the hub. The verbatim findings are gone and this one took their place.

Scope

reports/divergences.md lists 19 repositories still owing Fleet Bootstrap. Every one of them trips this check on the day it converges, so the finding count goes up as the fleet gets more correct, which inverts what the ledger is for. Blog is the only repository carrying it today, which is why it surfaced here first and why it is worth settling before the propagation wave.

Which rule gives

Not proposing a resolution, since it is a governance call, but the shapes seem to be:

  • Exempt the Fleet Bootstrap region from the reference check, keeping the check for prose outside it. This preserves both intents: readers do not see coordination machinery in ordinary rule text, and the one section whose job is routing still routes.
  • Drop the hub name from the canonical and describe the hub without naming it. This weakens the section, because an agent that reads "a shared template" with no destination cannot fetch it, which is the failure Fleet Bootstrap was added to fix.
  • Narrow the check to GOVERNANCE.md and .github/copilot-instructions.md, where the stale "report drift upstream" paragraph the comment mentions actually lived.

The first looks closest to the intent behind both rules, but that is a preference and the call is yours.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions