State what the fleet model achieves, before the per-type rules - #495
Conversation
The README went from what the repo holds straight into how it operates and then into the per-type rules, so a reader met the mechanics without ever being told what any of it buys. The objectives were real and consistently applied, and nowhere written down. What It Achieves states them as standing capabilities, each naming the machinery that delivers it so the claim is checkable rather than a slogan: workflow consistency by contract, technical consistency the three surfaces share, best practices promoted once rather than re-argued per repo, feedback loops that close on the procedure instead of the instance, a new language or target as a spec change, and re-deployment traced by content hash rather than by a version stamp a repo can keep while editing underneath it. Two of them carry the weight. The fidelity table makes the obligation on each carried unit explicit, from byte-identical through honor-this-contract and reach-this-outcome to merely-exist, so a reader can see how much freedom a given file grants instead of inferring it. And the last states the split that makes the model worth adopting: the maintainer keeps what an agent cannot know or must not decide, the agent takes the mechanical scale-out that does not benefit from human attention, and each repo's own knowledge has a declared destination so domain expertise is not diluted into a carried file that the next re-vendor overwrites. Every number is checked against the tree rather than recalled: thirteen declared project types, nine D-guarantees, and the four fidelity levels that files.json actually uses. The reference-definition block is alphabetized while three entries are added to it, since the governance keys sat out of order. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds an explanatory section to the README so readers learn the fleet model’s concrete objectives (“what it achieves”) before the operational mechanics and per-type rules.
Changes:
- Adds a new “What It Achieves” section (plus ToC entry) describing the model’s objectives and the machinery that makes each objective checkable.
- Introduces a fidelity-levels table and adds new reference links used by the section.
- Alphabetizes/extends the README reference-definition block to include new entries.
Two findings on the objectives section. The technical-consistency heading read "an agent cannot drift off", which parses as the agent drifting off rather than drifting from a standard. It now says the consistency does not depend on anyone remembering it, which is the actual claim: the three surfaces read one file rather than three copies. The destination list named CODESTYLE.md, ARCHITECTURE.md, OPERATIONS.md and TODO.md as though a reader would find all four here. Two of them are absent, correctly so, because ARCHITECTURE.md describes how a code repo is built and OPERATIONS.md how a live-service repo is run, and this hub is neither. The sentence now says what each destination takes and that which ones a repo carries follows from what it is, so the two present here are the two that apply rather than an incomplete set. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Suppressed comments (2)
README.md:79
- This sentence says fidelity is "declared per unit" in spec/files.json, but several baseline entries omit the
fidelityfield (e.g., README.md, HISTORY.md, OPERATIONS.md) and rely on the default ofpresenceinstead. Consider calling out thatpresenceis the default whenfidelityis omitted so readers don’t infer every entry must specify it explicitly.
- **Every carried unit declares how much freedom it grants.** This is the distinction that makes the whole thing tolerable to work in, and it is declared per unit in [spec/files.json][files] rather than left to be inferred:
README.md:86
- The table isn’t indented as part of the preceding list item. In GitHub-flavored Markdown, an unindented table typically breaks out of the list, which can split the “objectives” bullets into two separate lists with the table in between. Indent the table so it clearly nests under this bullet and the list remains continuous.
| Level | The obligation | Who owns the content |
| --- | --- | --- |
| `verbatim` | Byte-identical to canonical, after governed normalization | The hub. A paraphrase is a defect, not an adaptation. |
| `interface` | Honor a named contract, checked by name and wiring | The repo owns the body entirely. |
| `intent` | Reach the same outcome, judged by meaning | The repo owns the wording and shape. |
Two findings on the objectives section, both collapsed into the review body rather than raised as threads. The table sat unindented after the bullet that introduces it, so in GitHub-flavored Markdown it terminated the list and the three bullets after it started a second one. Eight bullets rendered as two lists with a table wedged between. Indenting it to the bullet's content column keeps one list. The prose also said fidelity is declared per unit "rather than left to be inferred", while nine baseline entries carry no fidelity field at all and take the default. The sentence now says an entry naming no level takes presence, and names presence as the most permissive of the four, so silence grants freedom rather than withholding it. That is the part a reader needs, because the safe assumption about an unmarked entry is the opposite of the true one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Answering the two suppressed findings from round 2, both fixed in 1. The table broke the list. Correct, and it is a rendering defect rather than a style preference. Unindented, the table terminated the list in GitHub-flavored Markdown, so the eight objectives rendered as two lists with a table wedged between them. It is now indented to the bullet's content column and the list is continuous, verified as 8 top-level bullets with 0 unindented table rows between them. 2. Rather than only noting the default, the sentence now says what it means: an entry naming no level takes |
…to main (#498) Promotes eight commits from `develop`. Every one traces to a defect found in use rather than to a planned change, and five came from downstream agents reporting what the procedure did not cover. ## What lands | Commit | Change | | --- | --- | | `a0f6f24` (#487) | `docs/content-import.md`, the three capture-pass findings from the Blog migration: an export is not a media capture, a sitemap is not the URL contract, and an HTTP fetch is not the original | | `8bdfa22` (#494) | The write-guard scopes by **owner** rather than exact origin, with `GH_WRITE_GUARD_ALLOW` for a different owner. Four target-flag spellings that silently bypassed rule 3 are closed | | `981d92f` (#492) | The purpose is restated as agent enablement, in `README.md`, `HISTORY.md` and `AGENTS.md` | | `275705b` (#493) | `TODO.md` becomes the fleet backlog destination, and `spec/readme-structure.md` stops mandating the construction `GOVERNANCE.md` bans | | `b6ab6db` (#491) | `STANDUP.md` step 0A names the maintainer-only prerequisites, and step 4 asserts the remote | | `89e3868` (#488) | The `version.json` floor is chosen at standup rather than inherited | | `eed2e00` (#495) | `README.md` gains "What It Achieves", the objectives and the fidelity ladder | | `f6dc5e6` (#497) | `CODESTYLE.md` stops claiming CI runs the same checks as the clean-compile | ## Provenance Five of the eight answer issues filed by downstream agents: #456 (Blog intake), #489 and #490 (the Blog carry), and #496 (Financial-Modeling). That loop is the one "What It Achieves" now describes, and this promotion is it closing. ## Divergence, checked rather than assumed `main...develop` reports `8 ahead, 102 behind, diverged`. **The 102 are topology, not content.** They are 79 promotion merge commits, which are main-only by construction because a promotion is a two-parent merge, plus 23 `Update codegen files` bot commits from this repo's pre-2.0 life as a .NET sample template. `git diff --name-status origin/develop origin/main` returns exactly the 12 files these 8 commits touch, so there is **no main-only content** to reconcile. ## Verification on the merged `develop` Every gate re-run after the last merge, not inherited from the individual PRs: - `prose_lint.py . --check charset --check dupword --check spelling` clean tree-wide. - `repo_gate.py` clean (`eol`, `sha-pin`). - `spec/validate.py` clean, 21 cataloged repos classify. - `gh-write-guard.py --selftest` passes, including the nine new repository-scope cases. - `python3 -m unittest discover -s scripts`, 180 tests pass. - The `README.md` objectives list verified as one continuous list of 8 bullets with the fidelity table nested, since an unindented table split it in review. ## Merge mechanics This is a promotion, so it merges as a **merge commit** with two parents, never a squash. Its head **is** `develop`, so `--delete-branch` must not be used. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds a
## What It Achievessection between "What This Repo Is" and "How This Repo Operates", so a reader learns what the model buys before meeting the mechanics and the per-type rules.The gap
The README went from what the repo holds straight into how it operates, then into the per-type rules. The objectives were real and consistently applied across every file here, and nowhere written down. A reader had to infer them from the machinery.
What lands
Eight objectives, each naming the machinery that delivers it so the claim is checkable rather than a slogan:
GOVERNANCE.mdorCODESTYLE.md, rather than rediscovered and re-argued in the next repo.The two that carry the weight
Every carried unit declares how much freedom it grants. This is the "must be exactly this / must do something but how is yours / yours entirely" distinction, and it already exists in
spec/files.jsonas a declared field. The table just surfaces it:verbatiminterfaceintentpresenceThe human contributes where domain expertise is decisive, and only there. The maintainer keeps what an agent cannot know or must not decide: creating a repository, granting a write outside the owner boundary, changing a ruleset, approving every merge, and every judgment about the domain a repo serves. The agent takes the mechanical scale-out, the part that does not benefit from human attention and degrades under it. Each repo's own knowledge has a declared destination so domain expertise is never diluted into a carried file that the next re-vendor overwrites.
Every number is checked, not recalled
spec/project-types.json, 13 keysWORKFLOW.md, 9### D<n>headingsspec/files.json, the set actually in use is exactlyintent,interface,presence,verbatimAlso in this diff
The reference-definition block is alphabetized while three entries are added to it. The
governance*keys sat out of order against the rule that each group is alphabetized by reference name.Verification
prose_lintblocking set clean tree-wide, and clean on changed lines.README.mdandHISTORY.md.🤖 Generated with Claude Code