The map of how a human or an agent enters the fleet system, the register of the gaps and loose ends between its parts, and the roadmap that closes them. This doc is hub-only and is not carried downstream, because it describes the hub's own seams rather than a fact about any one repo. It is a map and never the procedure: AGENTS.md, STANDUP.md, RESYNC.md, and AUDIT.md keep authority over their flows, and where this doc and a procedure doc disagree, the procedure doc wins and this map is what needs fixing.
Maintenance rule. A pull request that closes a register gap edits that gap's row and detail block in the same change, per GOVERNANCE.md "Durable Knowledge and Self-Improvement". A register describing a gap that is already closed is itself stale prose, so the register is only trustworthy while this rule holds. The same rule covers the map: a pull request that changes a mapped seam, or a flow this doc draws or points to, updates this doc in the same change.
- Scope and Non-Goals
- System Map
- Entry Points
- Skills Install Model
- Gap Register
- Proposed Skills
- Peer Messaging
- Simplified Technical English Evaluation
- Adoption and Operation Roadmap
- Decision Ledger Cross-References
This doc governs five things: the entry-point routing map, the gap register with a defined handoff per gap, the resolved skills install model, the proposals for new skills, and the phased roadmap. It does not author skills (skills ship through the .agents/skills/ pipeline in changes of their own), does not restate any procedure, and treats multi-agent coordination as a documented pattern only, with the rules in docs/peer-messaging.md. The version history that produced the current skill-based model is in HISTORY.md, so this doc states only what is.
flowchart TD
agents["AGENTS.md router"] --> standup[STANDUP.md]
agents --> resync[RESYNC.md]
resync --> audit[AUDIT.md]
standup --> audit
law["GOVERNANCE.md / CODESTYLE.md / WORKFLOW.md"] --> agents
spec["spec/ + registry/"] --> audit
scripts["scripts/ hub-hosted tooling"] --> audit
skills[".agents/skills/ source"] --> build[build_dist.py]
build --> plugin[".claude-plugin/ generated"]
build --> githubskills[".github/skills/ generated"]
plugin --> install[skills_install.py]
skills --> install
install --> host["host: ~/.agents/skills + plugin + stamp"]
hostsetup["host-setup/ cold start"] --> host
ci["CI gates + prose-gate action"] --> law
The layers, one line each. The lifecycle docs route and procedure (AGENTS.md routes, STANDUP.md creates, RESYNC.md re-lines, AUDIT.md measures). The law docs hold the rules (GOVERNANCE.md cross-cutting, CODESTYLE.md per language, WORKFLOW.md the CI/CD contract). The machine ground truth is spec/ plus registry/repos.json. The hub-hosted tooling is scripts/, reached rather than carried. The skills source of truth is .agents/skills/, and scripts/build_dist.py generates the GitHub Copilot tree and Claude Code plugin from it. scripts/skills_install.py installs the host-scoped forms. host-setup/ provisions a host from a stock OS. CI enforces the deterministic subset of the rules on every pull request.
Five doors into the system. Each subsection names its flow, the docs that own it, and the closed register gaps that sit on its path. Where the owning procedure doc draws its own flow diagram, that diagram keeps authority and this map points to it rather than carrying a copy that can drift. The diagrams below draw only the flows no procedure doc draws.
A fresh OS install, no git, no agent. The operator copy-pastes the loader lines from host-setup/README.md, and everything after that is scripted. No agent exists at this stage, so this path must work from prose and copy-paste alone.
flowchart TD
os["stock OS install"] --> paste["copy-paste loader lines"]
paste --> boot["bootstrap.sh / bootstrap.ps1"]
boot --> fetch["hub tarball fetch, no git needed"]
fetch --> upgrade["upgrade host packages"]
upgrade --> tools["install-tools: the host toolchain, floors in spec/host-tools.json"]
tools --> github["setup-github: identity, SSH signing, gh auth"]
github --> skillsinstall["install-skills: fleet skills for the user"]
skillsinstall --> safety["agent-safety install: write guard + CLAUDE.md blocks"]
safety --> verify["verify: host_gate + skills_install --report"]
verify --> session["first agent session"]
Owned by host-setup/ and docs/host-setup.md. The tools step also polices its own PATH: a stray copy shadowing a managed uv, jq, or git-restore-mtime install is named in the report and removed by an install or upgrade run when removal is safe. No open gaps sit on this path: G1, the skills install with no home in the provisioning flow, is closed and its row records the resolution.
An agent is told to create or stand up a repo. The router of last resort is the byte-locked Fleet Bootstrap section of AGENTS.md, mirrored host-wide by the CLAUDE.md block the agent-safety installer deploys, so the routing reaches an agent even in a directory holding nothing.
The section-by-section flow is diagrammed at the top of STANDUP.md, and the routing into it in the Fleet Bootstrap section of AGENTS.md.
Owned by STANDUP.md, packaged as the standup-a-repo skill. No open gaps sit on this path: G2, the silent bare-run overlay skip, is closed and its row records the resolution.
The hub has moved and a downstream repo is behind. The agent runs RESYNC.md from a hub checkout, which runs AUDIT.md end to end and applies the findings in a load-bearing order.
The routing and the load-bearing apply order are diagrammed at the top of RESYNC.md, the deletion triage in its section 4, and the audit pipeline with its verdicts in AUDIT.md.
Owned by RESYNC.md and AUDIT.md, packaged as the resync-a-repo skill with the carried-instruction-file-guard and copilot-instructions-keeper skills firing inside it. No open gaps sit on this path: G3, the audit-to-install bridge, G4, the prose-deletion sweep, and G5, the intent-staleness advisory, are closed and their rows record the resolutions.
The steady state. An agent writes Python, C#, shell, or config in a repo that already conforms, and the codestyle, commit, and review skills fire by trigger.
flowchart TD
start["session start"] -->|"restated-rule symptom"| stale["skills_install --report, per the documented cadence"]
start --> work["work: codestyle, commit, and doc skills fire by trigger"]
work --> gates["pre-commit gates: prose lint, eol"]
gates --> pr["pull request"]
pr --> review["Copilot loop via pr_review.py"]
review --> merge["merge per registry workflowModel"]
Owned by the per-language sections of CODESTYLE.md and the conduct skills. The gates node is the OPERATIONS.md "Run the gates the way CI runs them" section, and the review node runs through scripts/pr_review.py. No open gaps sit on this path: G6, the unwired staleness check, and G7, the operational direct-commit allowance, are closed and their rows record the resolutions.
Work on the fleet itself, run from a hub checkout: sweeping the fleet for drift, changing a carried rule, and changing the skills.
flowchart LR
subgraph sweep["fleet sweep"]
reg["registry iterate"] --> peraudit["per-repo audit"] --> issues["convergence issues"]
end
subgraph lifecycle["skill lifecycle"]
author["edit .agents/skills/"] --> gen["build_dist.py"] --> check["CI runs --check"] --> prq["PR"] --> merged["merge"] --> refresh["hosts re-run installer"]
end
subgraph rollout["carried-change rollout"]
specedit["spec or law edit"] --> revendor["fleet re-vendor per RESYNC"]
end
Owned by AUDIT.md section 10, GOVERNANCE.md "Hub-Hosted Tooling", and .agents/skills/README.md. The runnable form of this door is OPERATIONS.md: its "Audit the fleet" and "Apply or verify repository configuration" runbooks drive spec/audit.py and the repo-config/ apply, and its "Run the gates the way CI runs them" section runs scripts/repo_gate.py beside the prose gates. The gaps this path carried (G9, G10, G12) are closed: the four skills below cover the topics, the lifecycle, and the conduct rules, and the register rows record the resolutions.
Resolved: the install is global per user, and the work is closing its gaps, not adding a second model. A per-repo pinned install was considered and rejected: it would let a repo's skills match its own state, but it forfeits coverage of ad-hoc sessions in no repo at all (which is where the incidents this fleet guards against actually happened), doubles the staleness surface, and adds a version-resolution mechanism the fleet does not need while the whole fleet tracks one hub.
The lifecycle chain as built: a skill is hand-authored under .agents/skills/, scripts/build_dist.py generates .github/skills/ and the Claude Code plugin, and scripts/skills_install.py installs both host-scoped forms per machine. The installer stamps the hub commit into ~/.agents/skills-install-stamp.json. skills_install.py --report is the read-only staleness check and exits non-zero when the machine is behind the checkout.
Four wiring points close the model, and each is in place:
- Bootstrap (G1, closed):
host-setup/bootstrap.shandbootstrap.ps1end their host mode with a skills step, driven by theinstall-skillspair in the platform directories, degrading gracefully when theclaudeCLI is absent (the overlay half still lands, and the stamp records the partial install). Each loader hands the commit it resolved to the installer, so a stamp written from the tarball tree stays checkable. - Host contract (G1, closed):
docs/host-setup.mdstates the install and the verify command in its "Fleet Skills Install" section, and theREADME.md"Using This Repo" section names the skills install among its four deployed things. - Session entry (G6, closed): the tail of
AGENTS.mdsays a rule that keeps needing restating signals a stale install, and thefleet-conformance-checkskill runs the report and states the cadence, so the symptom routes to the check without new tooling. - Refresh cadence (G6, closed):
docs/host-setup.md"Fleet Skills Install" states it: re-run the installer when--reportexits non-zero, and after any hub merge that touches.agents/skills/. The maintainer runs it by hand, and an automated refresh is deliberately out of scope until the fleet has evidence the manual cadence fails.
| ID | Gap | Owner | Phase |
|---|---|---|---|
| G1 | Skills install is absent from the cold-start flow | script + doc | closed |
| G2 | Host-tools repo overlay is silently skippable | script + doc | closed |
| G3 | A failed tool floor names no install remedy | spec + script | closed |
| G4 | Deletion sweeps miss prose describing the deleted path | doc | closed |
| G5 | Intent-fidelity carried files have no drift detection | spec + decision | closed |
| G6 | Session entry never checks skill staleness | doc + skill | closed |
| G7 | Operational develop PR-only rule is prose-enforced | decision | closed |
| G8 | Generated plugin can ship stale with no CI gate | CI | closed |
| G9 | WORKFLOW.md and AUDIT.md have no skill coverage | skill | closed |
| G10 | The skill lifecycle itself has no skill | skill | closed |
| G11 | Peer messaging is live but undeclared | doc | closed |
| G12 | General conduct rules have no skill | skill | closed |
Each gap's handoff below states who detects it, what closes it, and the test that proves it closed. The handoff sentence is the contract the closing pull request implements.
- Gap - A host bootstrapped end to end via
host-setup/had every tool and no fleet skills, because no provisioning step ranscripts/skills_install.py. - Resolution - The bootstrap host mode ends with a skills step:
install-skills.shandinstall-skills.ps1drive the installer from the fetched tree, a--skillsaction runs the step on its own, and the bootstrap report reads--reportbeside the other status lines. Each loader hands the commit it resolved to the installer viaSKILLS_SOURCE_COMMIT, so the stamp written from a tarball tree stays checkable and--reportexits zero on a fresh host, which is this row's closing test.docs/host-setup.mdcarries the "Fleet Skills Install" section with the verify line, andREADME.md"Using This Repo" names four deployed things. - Decisions - The
claudeCLI stays out ofspec/host-tools.json: a Codex-only machine is a complete machine, so the installer degrades where the CLI is absent, landing the overlay half and recording the partial install in the stamp. The skills step is the recorded exception tohost-setup/'s no-Python and independent-fetchability rules, and it runs last in a stand-up soinstall-toolsprovides its interpreter first. - Cross-links - #671 and #673 touch the same
host-setup/scripts and stay open on their own tracks.
- Gap -
scripts/host_gate.pyrun without--reporead only the declaration at its own working directory, so a run started in a subdirectory of a repo carrying ahost-tools.jsonoverlay skipped that overlay without a word. - Resolution - A bare run whose working directory sits inside such a repo prints a warning naming the overlay's directory and the
--repore-run that counts it, asserted by theTestBareRunOverlayWarningcases inscripts/tests/test_host_gate.py. An explicit--repoand--no-localeach stay silent, since both are a choice the caller made.STANDUP.mdsection 0 states the residual case the warning cannot cover, a target repo that does not exist yet, instead of the workaround sentence.
- Gap - The tool catalog detected a stale tool, and the handoff back into
host-setup/did not exist: a failed floor left the operator or agent to rediscover which installer provides the tool. - Resolution - Each floored
spec/host-tools.jsonentry carries a per-platformremedybeside itssource, and a below-floor failure prints it as aREMEDY:line, with ahost-setup/path resolved against the checkout the gate runs from so the command is runnable as printed. The catalog's own note states the field's semantics.
flowchart LR
fail["host_gate: tool below floor"] --> lookup["read remedy for the tool and platform"]
lookup --> remedy["output prints the install command"]
remedy --> run["operator or agent runs it"]
run --> recheck["re-run host_gate"] --> ok["proceed"]
- Closing test -
scripts/tests/test_bootstrap.pyasserts the mapping stays total per platform, with the one recorded not-applicable exception, and that a remedy handing back into an installer names a tool that installer manages.spec/validate.pyand the schema require a remedy on every hub floor. A repository overlay may still add a floor without one, in which case the failure degrades to theINSTALL FROM:source line.
- Gap - A resync that deletes a carried file greps for the path and finds code uses, not prose describing the file without naming its path. A measured incident left a layout section describing a deleted script.
- Resolution - Split by what a pattern can reach. The named-path half is mechanized: the
dead-pathrule inscripts/prose_lint.pyreports a Markdown mention (a backtick span, an inline link target, or a reference definition) of a path git once tracked and the tree no longer holds. Keying on deletion history is what scopes it: a proposed file a backlog names, another repository's layout, and a ref likeorigin/developeach have no history here and stay silent, and a manifest-declared carried path is exempt since the hub's own instance retires to a catalog snippet while docs keep naming the carried file. A hub-hosted path is exempt for the mirror-image reason, measured downstream rather than predicted: a repository that deleted its copy per aretiredisposition still names the hub's, which is the pointerGOVERNANCE.md"Hub-Hosted Tooling" requires of it, and the manifest exemption cannot reach that case because no repository carriesspec/files.json. That set is a literal in the gate, since the prose-gate action can fetch the one file and no ledger beside it, and a test asserts it against the ledger'sretiredispositions so a new retirement cannot land on one side only. The rule runs in the default set and in CI, where the checkout fetches full history because the rule stands down loudly in a shallow clone rather than pass blind. The name-shaped half, the description that names no path, isacceptedas manual: no pattern reaches it, the same judgment the home-path rule records, so theRESYNC.mdsection 4 read of the layout and operations sections stands and now names the lint beside it. - Closing test -
TestDeadPathinscripts/tests/test_prose_lint.py, including the shallow stand-down and the tree-clean assertion. The rule's first tree-wide run caught a real instance,docs/host-setup.mddescribing bind-mounts in the deleted.devcontainer/definitions, fixed by re-pointing at the catalog snippets.
- Gap - A carried file at
intentfidelity was presence-checked only, so it could trail the hub by many revisions while the audit read clean. This class hid real drift before. - Resolution - The advisory ships in
spec/audit.py: for each applicable intent unit the audit compares when the hub canonical and the repo copy each last changed, and a canonical changing later reports the copy as possibly trailing, at DRIFT and never failing. A copy content-identical to the canonical is skipped, being both current and the promotion candidatespec/fidelity_honesty.pyexists to find. Measured on its first run: a fleet repo's carriedWORKFLOW.md,CODESTYLE.md, and.editorconfigeach reported as trailing hub changes made weeks earlier, findings no prior check produced. - Decisions - The handoff imagined reporting the hub revision each unit was last reconciled against, and no reconciliation record exists anywhere, so the last-modified comparison is the implementable proxy and ships instead of inventing a per-repo stamp. The advisory therefore says possibly: a copy touched after the hub change without actually reconciling reads current, a blind spot stated in
RESYNC.mdsection 5,AUDIT.md, andspec/fidelity-model.mdrather than papered over.
- Gap - A machine with stale or missing skills behaves like a machine that never installed them, and nothing at session entry said so. The symptom is a rule that keeps needing to be restated.
- Resolution - The cadence is stated in both places the row asked for.
docs/host-setup.md"Fleet Skills Install" directs a re-run of the installer when--reportexits non-zero and after any hub merge touching.agents/skills/, and thefleet-conformance-checkskill carries the same cadence in its own "Refresh cadence" section, routing the restated-rule symptom to the report it already runs. No new tooling, by design: the trigger is suspicion, and session entry stays uninstrumented until the fleet has evidence the manual cadence fails.
- Gap -
repo-config/operational/develop.jsoncarries deletion, non-fast-forward, and signature rules only, so nothing blocks a direct commit that skips the feature-branch instruction during a standup. - Resolution - Closed
accepted, mirroring thespec/divergences.jsonvocabulary, with the disposition recorded where the exposure is described:STANDUP.mdsection 0B states it beside its uneven-protection warning. The allowance is the operational model's foundation perWORKFLOW.md"Branch Model", and a standup runs on a feature branch either way, so the exposed interval is the tail of a procedure the instruction already governs. - Decisions - The considered alternative, applying the release
developpayload during standup and swapping to the operational payload after the closing audit, was declined: it adds a swap step that can be forgotten and a window where the live ruleset contradicts the registry's declared model, buying mechanical enforcement only for an interval the instruction already covers. A forgotten swap would surface as a ruleset defect on the next audit, which is real, and so would the contradiction it spends the interim in.
- Gap -
.github/skills/and.claude-plugin/are generated from.agents/skills/, and a merge that edits the source without re-runningscripts/build_dist.pywould ship stale distributions. - Resolution -
.github/workflows/validate-task.ymlrunsbuild_dist.py --checkas its own step in the lint job, on every pull request, and the required aggregator check gates on that job. A PR desyncing a generated tree therefore fails the required check, which is this row's closing test. - Provenance - The step landed in #676, which predates this register's merge, so this row's original
Checkedclaim was stale on arrival. Recording that here rather than silently deleting the row is the maintenance rule doing its job.
- Gap - The largest law doc (
WORKFLOW.md, the D1-D9 contract) and the measurement procedure (AUDIT.md) had no skill surface, while every other procedure and language did. ThirteenGOVERNANCE.mdsections were likewise doc-only. - Resolution - The
workflow-ci-contractandaudit-a-reposkills package the two docs in the kept-authority shape (the doc keeps the full rules, the skill is the summary that routes into it). TheAGENTS.mdrule map carries a disposition per section:Workflow YAML Conventionsand the three conduct sections are annotated with their surfacing skill, and a paragraph after the table states why each remaining unannotated section is doc-only by decision, so absence reads as a choice rather than an oversight. Both closing tests hold: the skills ship, and the map carries the dispositions. - Provenance - All four phase-2 skills shipped in one pull request at the maintainer's direction, superseding the one-pull-request-per-skill note this doc carried, with
skill-lifecycleauthored first inside it so the others follow its procedure.
- Gap - Authoring, changing, and retiring a skill was governed by scripts and scattered prose, so the agent most likely to get it wrong (one editing a skill) had no skill watching it.
- Resolution - The
skill-lifecycleskill packages the pipeline (source-versus-generated split,build_dist.pyregenerate and--check, installer and stamp semantics, the doc-packaging pattern, trigger-description conventions), and.agents/skills/README.mddefers to it for procedure, which is this row's closing test. It was authored first in phase 2 so the other three skills follow its procedure.
- Gap - Agent-to-agent messaging works and has produced real findings, and no committed doc stated its rules, so each session rediscovered the capability without its boundaries.
- Resolution -
docs/peer-messaging.mddeclares the method and its safety rules, hub-only, shipped beside this doc in the P0 pull request, and theTODO.md"Peer Messaging Between Agents as a Declared Method" item resolves to it. The row's phase cell trailed its own closure until the P3 register pass, which is the maintenance rule doing its job.
- Gap - The conduct layer (ask when unsure, never assume, verification before claiming done, delegation and token discipline) lived in carried
AGENTS.mdsections and doc-only GOVERNANCE sections, with no skill firing at the moments those rules are violated. - Resolution - The
agent-conductskill ships with the narrow decision-moment triggers the proposal specifies (about to claim done, about to assume, a failure just surfaced a lesson), summarizingVerification Discipline,Communicating with the User, andDurable Knowledge and Self-Improvement, which keep the full rules and carry the surfacing pointer, while the carried AGENTS.md sections stay the always-on layer.
Four skills close G9, G10, and G12, shipped through the .agents/skills/ pipeline with skill-lifecycle authored first so the other three follow its procedure (in one pull request at the maintainer's direction, per the G9 provenance note). Scope and overlap were settled here before authoring, and each block below is the contract its skill implements.
- Scope - Read-only measurement of a named repo ending in a committed report: the
AUDIT.mdflow, the verdict taxonomy, what the deterministic runner covers and what stays hand-judged, and the rule that measuring never edits. - Trigger - Asked to audit, measure, or verify conformance of a named repo, or to judge a conformance claim.
- Packages -
AUDIT.md, which keeps authority. - Overlap - Completes the triangle:
standup-a-repocreates,resync-a-repoapplies, and this measures.fleet-conformance-checkstays the in-repo self-check with no named target. Each description disambiguates against the others, in the style the existing three already use.
- Scope - The
WORKFLOW.mdbehavioral contract: the D-guarantees, the seam contract, artifact lifecycle, NBGV versioning, validate-at-entry, and the per-type walkthroughs as references. - Trigger - Writing or editing workflow YAML, adding or dropping a release target, or reasoning about why a publish did or did not fire.
- Packages - The YAML half of the pipeline.
operational-vs-release-workflowkeeps the git half (branching, promotion, publish policy), and the two descriptions state the split. - Overlap - The source doc is large, so the skill is a summary plus binding rules with
references/splits, the shapecomment-and-doc-stylealready uses.
- Scope - Creating, changing, splitting, and retiring a skill: the source-vs-generated split, the regen and
--checksemantics ofscripts/build_dist.py, the install and stamp semantics ofscripts/skills_install.py, the doc-packaging pattern (summary in the law doc, full rules in the skill), and trigger-description conventions. - Trigger - About to create or edit anything under
.agents/skills/or.claude-plugin/. - Packages -
.agents/skills/README.mdprocedure content, which then defers to it. - Overlap - None, and the absence was gap G10. Adjacent to
comment-and-doc-stylefor SKILL.md prose only.
- Scope - The conduct rules with no skill surface: verification before claiming done, asking instead of assuming, recording a lesson when a failure surfaces one, and the delegation summary.
- Trigger - Narrow, at decision moments: about to claim work is done without having verified it, about to proceed on an assumption the user could cheaply confirm, or a failure just surfaced a durable lesson. Deliberately not always-on: the carried
AGENTS.mdsections are the always-on layer, and an always-on conduct skill would duplicate them and spend the tokens the delegation rules exist to save. - Packages -
Verification Discipline,Communicating with the User, andDurable Knowledge and Self-ImprovementfromGOVERNANCE.md, which keep authority. - Overlap - The commit, review, and doc skills each carry their own conduct rules already, and this skill points rather than restates where one of those owns the moment.
Agent-to-agent messaging on one host is a working method with measured value, and its rules are declared in docs/peer-messaging.md. The location decision from the TODO.md item resolves to a hub-only doc first: the rules bind sessions on the maintainer's own hosts today, the transport cannot cross a machine boundary, and a carried GOVERNANCE section costs a fleet re-vendor for rules whose cross-host half is unverified. Promotion to a carried section or a skill is re-evaluated when cross-host messaging is verified or a downstream session demonstrably needed the rules and lacked them.
Should agent-authored prose adopt ASD-STE100, a controlled language standard, or a lighter constrained house style? The criteria: does it improve agent instruction-following, does it compose with the enforcement that exists (scripts/prose_lint.py and the character-set and semicolon rules), what does it cost to author, and does its vocabulary fit a technical fleet.
| Criterion | Full ASD-STE100 | Constrained house style |
|---|---|---|
| Instruction-following | One-instruction-per-sentence and active voice measurably help | The same two properties, adoptable directly |
| Enforcement fit | The controlled dictionary is not lintable by the existing tooling | Each rule lands as a prose_lint.py check like the current ones |
| Authoring cost | Approved-word lookup on every sentence, for every author and agent | Marginal on top of the rules already enforced |
| Vocabulary | The approved general-word list excludes ordinary technical usage this fleet needs | Unrestricted vocabulary, restricted structure |
Recommendation: adopt the structural half (short sentences, one instruction per sentence, active voice, imperative procedure steps) as house style, codified incrementally as prose_lint.py checks. Do not adopt the controlled dictionary. The existing rules already lean this way, so this is a direction confirmed rather than a new regime.
Decision: adopted as recommended, the structural half as house style and no controlled dictionary. The first structural check is the sentence-length rule in scripts/prose_lint.py, capped at ASD-STE100's 25-word descriptive limit. It ships opt-in like sentence-split, since at landing it counted 1686 over-cap sentences in the hub's own corpus. A default or CI gate would fail whole files nobody is editing. Promotion into DEFAULT_RULES or CI is a separate decision, taken if and when the corpus converges. The decision is recorded in GOVERNANCE.md "Documentation Style Conventions" under "Sentence Structure", with the full house-style rules in the comment-and-doc-style skill. The skill also states why the two unlintable halves stay authoring discipline.
Design-doc first: this doc merges, then each unchecked item becomes an issue linking its register row, and the closing pull request edits the row per the maintenance rule.
- Fleet map and gap register committed (this doc)
- Peer messaging declared (
docs/peer-messaging.md, closes G11) -
TODO.mdpeer-messaging item resolved by pointer
- G1 bootstrap skills step, host-setup section, README fourth deployed thing (cross-links the open host-tooling issues #671 and #673, which touch the same scripts)
- G2
host_gate.pybare-run warning - G3 failed-floor remedy output
- G6 staleness cadence wording
- G8
build_dist.py --checkin CI, found already in place via #676 and recorded closed
- G10
skill-lifecycleskill, authored first - G9
audit-a-reposkill - G9
workflow-ci-contractskill, withreferences/splits for the guarantee catalog and the test methodology - G12
agent-conductskill, narrow decision-moment triggers per the proposal - G9 disposition sweep over the doc-only GOVERNANCE sections in the
AGENTS.mdrule map
- G4 disposition: the
dead-pathlint ships for the named-path half, the manual read stands for the name-shaped half - G5 disposition: the last-modified advisory ships in
spec/audit.py - G7 disposition:
accepted, recorded inSTANDUP.mdsection 0B
- Refresh cadence observed in practice, revisited if the manual cadence fails
- Register rows retired as they close, per the maintenance rule
- Peer-messaging promotion re-evaluated after cross-host verification
- STE structural checks land in
prose_lint.pyincrementally: adopted, the first (sentence-length, opt-in) shipped, and the rest land on evidence per the decision above
TODO.md stays the running backlog, and this register does not fork it. The peer-messaging item resolves to docs/peer-messaging.md and section G11. The host-tooling cluster (#671, #672, #673) touches the same host-setup/ surface as G1 and G3, so those issues and the P1 items cross-link rather than duplicate. A future TODO entry about an adoption gap lands as a register row here instead, with TODO carrying only the pointer. The open issues #699 (a repo and worktree layout convention with its own skill) and #700 (Python tooling in CI with a scripts split) each touch a mapped seam and stay on their own tracks, cross-linked here rather than duplicated.