feat(bin): land fleet-wide general guidelines in AGENTS.md and crewmate briefs - #2735
Open
EternalTime wants to merge 5 commits into
Open
feat(bin): land fleet-wide general guidelines in AGENTS.md and crewmate briefs#2735EternalTime wants to merge 5 commits into
EternalTime wants to merge 5 commits into
Conversation
Land the captain's edits: refreshed nautical-seasoning examples, a pointer to ~/VOICE.md when writing under his identity, a new general-guidelines section for all crewmates, and a plain-language rule in section 9. Give the sentence-per-line, plain-dash, and no-agent-co-author rules a single owner in that new section, replacing the copies in the coding guidelines skill, CONTRIBUTING.md, and section 1 with cross-references.
…line, brief guidelines
This was referenced Aug 22, 2026
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.
Intent
The captain hand-edited firstmate's AGENTS.md in his primary checkout and asked for those edits to be landed properly through a PR. This branch applies his exact patch and nothing more in substance: (1) the nautical-seasoning examples become "yessir", "under way", "ahoy"; (2) a new line directs agents to read ~/VOICE.md when writing or posting under the captain's own identity, including public-facing work; (3) a new '## General Guidelines for all crewmates, including firstmate' section is added between the preamble and section 1, carrying his fleet-wide rules on em dashes, commit co-authorship, sentence-per-line Markdown/TeX, weighting quality over development cost, reproducing bugs end-to-end before fixing, pixel-perfect UI pickiness, and the same standard for lint and flaky tests; (4) section 9 gains 'Always use plain language when messaging the captain.'
His wording and meaning are authoritative and were deliberately preserved verbatim. I was explicitly instructed to correct only mechanical slips: the 'scalabilitiy' typo, missing full stops, one trailing space, and splitting the lines that carried two sentences so each full sentence sits on its own line per repo style. I was told NOT to reword, soften, expand, or restructure his guidelines - so terse imperative phrasing, the shouty 'NEVER', informal 'talking/posting', and the untyped ~/VOICE.md home path are intentional and must not be 'improved'. The ~/VOICE.md path was independently verified to exist today (v0.5, with three former copies now symlinked to it), so it is correct as written.
The em dash character does appear once in AGENTS.md, inside the quoted rule that forbids it; naming the character is necessary for the rule to be readable.
I was also instructed to honour the repo's one-owner rule: the new fleet-wide section now owns three rules that were previously stated in full elsewhere (one sentence per line, plain dash over em dash, no agent name as commit co-author). I therefore removed the duplicate copies and left one-line cross-references in their place: the four bullets in .agents/skills/firstmate-coding-guidelines/SKILL.md's 'Repo style rules', that skill's front-matter description list, the single bullet in CONTRIBUTING.md, and the standalone co-author line in AGENTS.md section 1. Genuinely repo-specific rules (shellcheck, bin/fm-lint.sh, colocated tests, maintainer-verification records) were deliberately left stated in full where they already lived. No rule was deleted without another owner.
Scope constraints accepted at intake: AGENTS.md section numbering and every safety boundary are unchanged - this task adds guidance, it does not renumber or restructure. bin/fm-doc-audience-check.sh passes locally.
What Changed
AGENTS.mdgains a "General Guidelines for all crewmates, including firstmate" section between the preamble and section 1 (em dash ban, commit co-authorship, sentence-per-line Markdown/TeX, quality over development cost, reproduce bugs end to end, pixel-perfect UI pickiness, same bar for lint and flaky tests), narrows the nautical-seasoning examples to "yessir"/"under way"/"ahoy", and adds "Always use plain language when messaging the captain." to section 9;GROK_BOT.mdis updated to match both voice points. Per the one-owner rule, the duplicate sentence-per-line and em-dash statements in.agents/skills/firstmate-coding-guidelines/SKILL.mdandCONTRIBUTING.mdare replaced with cross-references that state where each rule now lives and why the repo-local bar is deliberately stricter.bin/fm-brief.shinterpolates a mirrored copy of that section into generated crewmate briefs, since a worker in another project's worktree never loads firstmate'sAGENTS.md. Ship briefs get the full block; scout briefs get only the report-relevant subset, omitting the commit co-author rule and every "fix it along the way" directive that a report-only, scratch-worktree scout would never act on. Secondmate charters are excluded, as that home carries its ownAGENTS.md.tests/fm-brief.test.shadds two cases: one asserting both crewmate scaffolds carry the block and the secondmate charter does not, and a drift guard that maps eachAGENTS.mdsentence to the brief line mirroring it, checks completeness in the reverse direction, and asserts the scout-only omissions.bin/fm-test-run.shmapsGROK_BOT.mdinto the same changed-test family asAGENTS.md/CLAUDE.md/CONTRIBUTING.md, which previously made--changedselection fail closed on this branch.Two review notes are left open for the captain rather than resolved here: the
~/VOICE.mdvoice-profile line named in the intent was deliberately dropped on the captain's round-1 instruction and is not in the tree, andAGENTS.mdsection 1 keeps its own stricter co-author line without the cross-reference the other duplicates received.Risk Assessment
✅ Low: The round-4 change is a three-line, test-only fix that makes the drift guard read the AGENTS.md section literally while preserving its behavior, failure messages, and current-shell execution, leaving the branch a well-bounded documentation change plus a tested brief-scaffold addition with no open concerns.
Testing
I exercised the change the way a crewmate actually meets it: generated real ship, scout, and secondmate briefs from bin/fm-brief.sh and read the rendered "# General guidelines" block in each, then ran the three targeted suites that own the changed surfaces (fm-brief, fm-test-run, fm-documentation-audiences) - all green. Because a passing new test proves little on its own, I mutated AGENTS.md and bin/fm-brief.sh three ways (softened a guideline, added an unmirrored one, leaked a ship-only rule into the scout copy) and confirmed the new drift guard fails loudly with a specific diagnostic each time, then restored the tree clean. I also confirmed round 1's GROK_BOT.md mapping fix actually unblocks
bin/fm-test-run.sh --changedon this branch, and swept the shipped text for every intent item: the "yessir"/"under way"/"ahoy" seasoning, the new fleet-wide section, the section 9 plain-language line, the corrected "scalability" typo, and the single deliberate em dash inside the rule that forbids it. Two required intent items still cannot be demonstrated because they are not in the tree - the ~/VOICE.md directive and the promised one-line cross-reference replacing AGENTS.md section 1's co-author rule - both first raised in round 1 and unchanged since; they are reported for a captain decision. No screenshot or rendered-HTML artifact applies here: every surface this change touches is raw Markdown consumed by an agent's context window, so the faithful end-user artifact is the generated brief text and CLI transcripts, which I captured verbatim.Evidence: Generated crewmate briefs: the fleet-wide guidelines as a worker actually receives them
=== What a SHIP crewmate actually reads in its brief (generated by bin/fm-brief.sh) === # General guidelines - Never use the em dash character; write a plain dash "-" instead. - Never add an agent name as a commit co-author. - Put each full sentence on its own line in long Markdown or TeX files. - Weigh quality, simplicity, robustness, scalability, and long-term maintainability far above development cost. - Reproduce a bug end to end the way a user would hit it before fixing it, so the fix lands on the real cause. - Be picky about the UI you see while testing, down to the pixel; if something looks off, get it fixed along the way. - Hold that same bar for lint failures, test failures, and flaky tests you run into, even ones your task did not cause. === What a SCOUT crewmate actually reads (report-only subset) === # General guidelines - Never use the em dash character; write a plain dash "-" instead. - Put each full sentence on its own line in long Markdown or TeX files. - Reproduce a bug end to end the way a user would hit it before drawing conclusions about it, so your findings rest on the real cause. === Secondmate charter (must NOT carry a second copy; it loads its own AGENTS.md) === 0 occurrences - correctEvidence: Drift guard proven to bite: three mutations, three specific failures
### Mutation A: soften an AGENTS.md guideline the brief mirrors (pixel perfection -> vague wording) not ok - drift: AGENTS.md's general-guidelines section no longer says "be picky about the UI you see and be obsessed with pixel perfection", but bin/fm-brief.sh's GENERAL_GUIDELINES_SHIP still mirrors it as "Be picky about the UI you see while testing, down to the pixel" - update both together ### Mutation B: add a NEW guideline to AGENTS.md that no brief carries not ok - drift: AGENTS.md's general-guidelines section states "Never hardcode secrets in source files.", which no line of bin/fm-brief.sh's brief copy mirrors - add it to GENERAL_GUIDELINES_SHIP (and GENERAL_GUIDELINES_SCOUT if a report-only scout acts on it) and to this test's map ### Mutation C: leak a ship-only guideline into the scout brief not ok - scope: the scout brief from bin/fm-brief.sh (GENERAL_GUIDELINES_SCOUT) carries "Never add an agent name as a commit co-author.", which a report-only scout never acts on - keep that guideline in GENERAL_GUIDELINES_SHIP alone ### Restored tree: (clean)Evidence: Intent items (1), (3), (4) and the mechanical corrections, verified in the shipped text
=== AGENTS.md: new fleet-wide section (intent item 3) === ## General Guidelines for all crewmates, including firstmate Never use the em dash "—". Use plain dash "-" instead. When writing commit messages, NEVER auto-add your agent name as co-author. When writing or substantially editing long Markdown or TeX files, put each full sentence on its own line. When making technical decisions, do not give much weight to development costs. Instead, prefer quality, simplicity, robustness, scalability, and long term maintainability. When fixing bugs, always start with reproducing the bug in an E2E setting as closely aligned with how an end user may encounter it. This makes sure you find the real problem so your fix will automatically solve it. When end-to-end testing a product, be picky about the UI you see and be obsessed with pixel perfection. If something clearly looks off, even if it is not directly related to what you are doing, try to get it fixed along the way. Apply that same high standard to engineering excellence: lint, test failures, and test flakiness. If you see one, even if it is not caused by what you are working on right now, still get it fixed. === nautical seasoning (intent item 1) === AGENTS.md:10:Use light nautical seasoning only when it fits: the occasional "yessir", "under way", or "ahoy" may land naturally. GROK_BOT.md:24:Let light nautical seasoning land only when it fits naturally - an occasional "yessir", "under way", "ahoy" ... === section 9: plain language (intent item 4) === AGENTS.md:453:Always use plain language when messaging the captain. GROK_BOT.md:25:Speak in outcomes and consequences, not internal mechanics, and always use plain language with the captain. === em dash audit: only the quoted rule that forbids it === AGENTS.md:16:Never use the em dash "—". === 'scalabilitiy' typo must be gone === (none - typo corrected)Evidence: Two unmet intent items: ~/VOICE.md absent, co-author rule stated twice
=== Intent item (2): the/VOICE.md directive === $ git grep -n "VOICE" -- . tests/fm-brief.test.sh:396: assert_no_grep "VOICE.md" "$brief" (only hit is an assertion that it must NOT appear; the directive itself is nowhere in the tree) -- what the captain's own source still says --/.claude/CLAUDE.md:23:## Voice Profile "When you are talking/posting on behalf of Damian using his identity, read ~/VOICE.md to see how Damian writes" === One-owner claim: the commit co-author rule === AGENTS.md:18:When writing commit messages, NEVER auto-add your agent name as co-author. AGENTS.md:60:Never add an agent name as a commit co-author. <-- no cross-reference; intent said this became one .agents/skills/.../SKILL.md:119:Never add an agent name as a commit co-author: no agent name, by any means, ... (has cross-reference) CONTRIBUTING.md: one-sentence-per-line bullet + explicit "AGENTS.md ... owns the fleet-wide guideline" pointerEvidence: Changed-test selection now resolves on this branch (round-1 GROK_BOT.md mapping fix)
$ bin/fm-test-run.sh --list --changed --base 1cb900c28faf23fe23c9bb54e63f7c3b436ea096 tests/fm-arm-pretool-check.test.sh tests/fm-ask-user-authority.test.sh tests/fm-bearings-board.test.sh tests/fm-brief.test.sh tests/fm-calm-pi-extension.test.sh tests/fm-cd-pretool-check.test.sh tests/fm-classify-decision-key.test.sh tests/fm-composer-ghost.test.sh ... (32 scripts selected) fm-brief.test.sh selected: 1Evidence: Full generated ship crewmate brief (product artifact)
Evidence: Full generated scout crewmate brief (product artifact)
Evidence: Full generated secondmate charter (must carry no second guidelines copy)
Pipeline
Updates from git push no-mistakes
... (3 earlier update rounds omitted to keep the PR body within GitHub's 65536-char limit; full history is in the run log.)
🔧 **Review** - 7 issues found → auto-fixed (3) ✅
🔧 Fix: restore repo style rules, drop captain-personal line, brief guidelines
5 issues (1 warning, 4 infos) still open:
bin/fm-brief.sh:358- The general-guidelines block is interpolated into the scout scaffold as well as the ship scaffold, and two of its lines tell the worker to change code: "Be picky about the UI you see while testing, down to the pixel; if something looks off, get it fixed along the way." and "Hold that same bar for lint failures, test failures, and flaky tests you run into, even ones your task did not cause." A scout's contract is report-only - the scaffold's own Definition of done (bin/fm-brief.sh:361-368) makes the report at data/<id>/report.md the sole deliverable, the script header states "no branch, no push, no PR" and "the worktree is scratch", and AGENTS.md hard rule 3 declares a scout worktree scratch and discardable once the report exists. Anything a scout "fixes along the way" is thrown away with the worktree, and the budget spent fixing is budget not spent reporting. Same shape, weaker, on the ship path at line 477: the guidelines are placed above the no-mistakes Definition of done, whose rule reads "Do not hand-edit, commit, or fix findings yourself while a run is active - the pipeline applies every fix", so a crewmate mid-pipeline meets an unqualified "fix lint failures you run into" before it meets that ban. The captain's instruction was to add the guidelines to the crewmate brief scaffold and the scout brief is a crewmate brief, so this is a scoping question for you rather than an implementation error. Two workable shapes: omit those two lines from the scout interpolation only, or add one clause - report what you find rather than fixing it when your contract is a report or a pipeline run is active - so both scaffolds stay consistent with their own delivery contract.bin/fm-brief.sh:308- The block's own comment says it mirrors AGENTS.md's "General Guidelines for all crewmates, including firstmate" section, and a copy is genuinely the only mechanism here - a crewmate in another project's worktree cannot follow a cross-reference into firstmate's AGENTS.md - so this is a justified exception to the one-owner rule rather than casual duplication. The gap is that nothing keeps the two in step: the new test at tests/fm-brief.test.sh:376 pins the brief's own strings, not agreement with the section it mirrors, and AGENTS.md carries no pointer telling an editor a second copy exists. The copy has already drifted at birth on two points (see the separate scalability finding, and the co-author line, which states the absolute form here while AGENTS.md:21 states the narrower "auto-add your agent name" form). A one-line maintenance pointer would close it cheaply. The natural home is the AGENTS.md section itself, but that means adding a line to the captain's authoritative text; the safe alternative is a line in .agents/skills/firstmate-coding-guidelines/SKILL.md, which is the loaded guide for anyone editing this repo's shared tracked material and already owns the one-owner and inline-stub rules. Your call which.bin/fm-brief.sh:313- The mirrored quality guideline reads "Weigh quality, simplicity, robustness, and long-term maintainability far above development cost." AGENTS.md:23-24 lists five qualities: "prefer quality, simplicity, robustness, scalability, and long term maintainability". The brief copy drops "scalability". That word was one of the explicitly authorized mechanical corrections in this task (the 'scalabilitiy' typo fix), so losing it from the crewmate-facing copy is an unintended fidelity gap in a block whose stated purpose is to mirror that section. Restore it to the list.AGENTS.md:59- The captain's instruction was "Restore the absolute form as the repo rule where it was removed: 'Never add an agent name as a commit co-author.'" That line was removed from two places: .agents/skills/firstmate-coding-guidelines/SKILL.md, where it is now restored at line 119, and AGENTS.md section 1, where it stood at the end of the shared-tracked-material delivery paragraph that now ends at this line. Section 1 was not restored, so the only statement inside AGENTS.md remains the narrower fleet-wide form at line 21 ("NEVER auto-add your agent name as co-author"). Reading the instruction alongside "Keep the captain's wording in AGENTS.md", restoring only the repo-rules owner is a defensible interpretation, and coverage is adequate in practice: the skill is the declared load-before-editing guide for this repo's shared tracked material, which is exactly the commit context, and every crewmate brief now carries the absolute form. Flagging only so you can confirm that SKILL.md alone satisfies "where it was removed", rather than having section 1's one-line reinforcement dropped by accident.AGENTS.md:11- Recorded so the divergence is not mistaken for a regression later: the original --intent text lists as required "(2) a new line directs agents to read ~/VOICE.md when writing or posting under the captain's own identity, including public-facing work", and both of those lines are now absent from AGENTS.md. This is not a contradiction to resolve - it is the captain's explicit round-1 decision ("Remove the captain-personal line from AGENTS.md entirely. Delete both the name and the ~/VOICE.md path. Do NOT replace it with a generic pointer, a placeholder, or a config-file reference"), which supersedes that clause of the intent. The removal is complete and clean: no placeholder was left, and tests/fm-brief.test.sh:410 asserts no generated brief leaks the instruction either. The one thing not verifiable from this branch is the other half of that decision - the instruction moving wholesale into firstmate's private captain-preferences file, which per AGENTS.md:95 and docs/configuration.md:139-141 is data/captain.md, gitignored and therefore outside this diff. Worth confirming firstmate has actually recorded it there, since otherwise the guidance is simply gone. No action needed on this branch.🔧 Fix: split scout brief guidelines, add AGENTS.md drift guard
1 warning still open:
tests/fm-brief.test.sh:493- The completeness loop iterates the AGENTS.md section through an unquoted heredoc:done <<EOF
$section
EOF
An unquoted heredoc performs command substitution, parameter expansion, and backslash processing on its body, so the test does not read the section literally - it evaluates it. The General Guidelines section happens to contain no backtick, $, or backslash today (I checked AGENTS.md:19-30), so the guard passes correctly right now; the hazard is that this test's entire purpose is to fire when someone edits that section. AGENTS.md uses backticks constantly for paths and commands, so a plausible future fleet-wide guideline - "Run
bin/fm-lint.shbefore treating a script change as done" - would make the test shell out and run bin/fm-lint.sh while building the line it was supposed to compare, and $FOO in a guideline would silently expand to empty and then fail the claimed-by-a-map-row check with a confusing message.The pipe-into-while form is the wrong fix here: tests/lib.sh:44-47 defines fail() as printf plus
exit 1, so running the loop in a subshell would turn a real drift failure into a silently ignored one. Two forms keep the loop in the current shell and read the text literally: write the section to a file next to the map (agents_general_guidelines_section > "$TMP_ROOT/general-guidelines-section.txt"anddone < "$TMP_ROOT/general-guidelines-section.txt"), which matches how write_general_guidelines_map already feeds the other loop, or use bash process substitution (done < <(agents_general_guidelines_section)). The file form is the closer fit to the file's existing pattern.🔧 Fix: read AGENTS.md section literally in brief drift guard
✅ Re-checked - no issues remain.
AGENTS.md:14- Intent item (2) is not in the landed change: the line directing agents to read~/VOICE.mdwhen writing or posting under the captain's own identity is absent from AGENTS.md and from every other tracked file. Commit 2725ed2 ("drop captain-personal line") removed it. The captain's own source still carries it as## Voice Profile-> "When you are talking/posting on behalf of Damian using his identity, read ~/VOICE.md to see how Damian writes", and the intent states the path was independently verified to exist (it does: /Users/owlshome/VOICE.md, 39650 bytes). I cannot produce evidence for a required intent item that is not present, so the captain needs to decide whether to restore the line or amend the intent.AGENTS.md:60- The one-owner claim in the intent does not match the tree for the commit co-author rule. The intent says the standalone co-author line in AGENTS.md section 1 was replaced by a one-line cross-reference, but AGENTS.md now states the rule twice with no pointer between them: line 18 ("When writing commit messages, NEVER auto-add your agent name as co-author.") in the new fleet-wide section and line 60 ("Never add an agent name as a commit co-author.") in section 1. The SKILL.md and CONTRIBUTING.md duplicates were given explicit cross-references explaining why they are deliberately stricter; the AGENTS.md section 1 copy was not, so it reads as an unowned duplicate rather than an intentional narrower rule.bin/fm-test-run.sh:991-bin/fm-test-run.sh --changedfailed closed on this branch with "no changed-test mapping for source path: GROK_BOT.md", because the branch is the first to touch GROK_BOT.md and the changed-file table had no entry for it. This makes the repo's documented targeted-test selection (bin/fm-test-run.sh --changed --base origin/main) unusable for anyone working this branch. I added GROK_BOT.md to the same mapping case as AGENTS.md/CLAUDE.md/CONTRIBUTING.md, which is the class of file it belongs to; selection now resolves to 32 pure-contract-unit scripts andtests/fm-test-run.test.sh(which owns the fail-closed-on-unmapped contract) still passes.bin/fm-test-run.sh tests/fm-brief.test.sh- 22 assertions including the two new ones (crewmate briefs carry the fleet-wide general guidelines,ship and scout guideline copies track the AGENTS.md section they mirror)bin/fm-test-run.sh tests/fm-documentation-audiences.test.sh tests/fm-ensure-agents-md.test.sh- doc classification/owner-pointer and AGENTS.md scaffolding contractsbin/fm-test-run.sh tests/fm-test-run.test.sh- re-run after my changed-file mapping fix, covers the fail-closed-on-unmapped-source contractbin/fm-doc-audience-check.sh- the repo's documentation contract check the intent claims passes locally (ok surfaces=69 local_links=256)Manual end-user artifact generation:FM_HOME=<tmp> bin/fm-brief.sh <id> demo-proj --mode no-mistakes,--scout, and--secondmate alpha, then read the renderedbrief.mdfor eachDrift-guard negative check A: deleted "do not give much weight to development costs" from the AGENTS.md section and confirmedtests/fm-brief.test.shfails with an actionable drift messageDrift-guard negative check B: added an unmirrored guideline to the AGENTS.md section and confirmed the completeness direction of the guard failsDrift-guard negative check C: leaked the ship-only pixel-perfection guideline intoGENERAL_GUIDELINES_SCOUTin bin/fm-brief.sh and confirmed the scope assertion failsFidelity diff of the landed AGENTS.md section against the captain's~/.claude/CLAUDE.md"## General Guidelines" source, normalising only the four declared mechanical fixesbin/fm-test-run.sh --list --changed --base 1cb900c- before (died on GROK_BOT.md) and after the mapping fix🔧 Fix: map GROK_BOT.md in changed-test selection table
2 issues (1 error, 1 warning) still open:
AGENTS.md:14- Required intent item (2) is still absent from the tree, so I cannot produce evidence for it.git grep VOICEover all tracked files returns exactly one hit -tests/fm-brief.test.sh:396, an assertion that the string must NOT appear in a generated brief. There is no line anywhere in AGENTS.md (or any other tracked file) directing agents to read~/VOICE.mdwhen writing or posting under the captain's own identity. Commit 0277a4f added the captain's section, and commit 2725ed2 ("drop captain-personal line") removed the voice-profile directive; dc825c3 then added a test that locks its absence in. The captain's own source still carries it (~/.claude/CLAUDE.md, "## Voice Profile" -> "When you are talking/posting on behalf of Damian using his identity, read ~/VOICE.md to see how Damian writes"), and the intent states the path was independently verified to exist. This was raised in round 1 and is unchanged at the target commit, so the captain needs to decide: restore the line (and drop or invert the brief assertion that forbids it), or amend the intent to record that the voice-profile directive is deliberately fleet-local and not landed here.AGENTS.md:60- The intent's one-owner claim - that the standalone co-author line in AGENTS.md section 1 was replaced by a one-line cross-reference - does not hold at the target commit, so I could not demonstrate it. AGENTS.md states the rule twice with no pointer between the two: line 18 ("When writing commit messages, NEVER auto-add your agent name as co-author.") in the new fleet-wide section, and line 60 ("Never add an agent name as a commit co-author.") in section 1. Commit 0277a4f did remove line 60 as the intent describes; the later review commit dc825c3 re-added it verbatim, without the cross-reference the intent promised. The other two duplicates were handled as described - SKILL.md:119 and CONTRIBUTING.md carry explicit "deliberately stricter / owned fleet-wide by AGENTS.md" cross-references - which makes the untouched AGENTS.md section 1 copy read as an unowned duplicate rather than an intentional narrower rule. The captain should decide whether section 1 keeps its own stricter statement (with a cross-reference like SKILL.md's) or defers to the fleet-wide section.bash tests/fm-brief.test.sh- full colocated suite for the changed script, including the two new casestest_briefs_carry_fleet_general_guidelinesandtest_brief_guidelines_track_agents_md_section(22 checks, all pass)bash tests/fm-test-run.test.sh- owns the fail-closed-on-unmapped-source contract touched by the round-1 GROK_BOT.md mapping fix (all pass)bash tests/fm-documentation-audiences.test.sh- prose classification and owner-pointer guard for the changed AGENTS.md / CONTRIBUTING.md / SKILL.md surfaces (all pass)Manual end-to-end brief generation:FM_HOME=<tmp> bin/fm-brief.sh evidence-ship demo-proj --mode no-mistakes,... evidence-scout demo-proj --scout, andFM_SECONDMATE_CHARTER=... ... evidence-2m --secondmate alpha, then read the resultingbrief.mdfiles - the actual text a crewmate loadsMutation test A: softened "be picky about the UI ... pixel perfection" in AGENTS.md, confirmed the drift guard fails with a named-sentence diagnostic, restored the fileMutation test B: added an unmirrored guideline ("Never hardcode secrets in source files.") to the AGENTS.md section, confirmed the reverse-completeness check fails, restored the fileMutation test C: leaked the ship-only co-author guideline intoGENERAL_GUIDELINES_SCOUTin bin/fm-brief.sh, confirmed the scope check fails, restored viagit checkout --bin/fm-test-run.sh --list --changed --base 1cb900c- confirms the branch's changed-file set now resolves (32 scripts, including tests/fm-brief.test.sh) instead of failing closed on GROK_BOT.mdIntent conformance sweep over the shipped text: nautical-seasoning examples in AGENTS.md:10 and GROK_BOT.md:24, section 9 plain-language line at AGENTS.md:453 and its GROK_BOT.md:25 counterpart,grep -rn '—'em-dash audit,grep -rn scalabilitiytypo check, andgit grep VOICE/grep -rn co-authorfor the two open itemsgit status --porcelain- worktree left clean, no transient artifactsbin/fm-supervise-daemon.sh:654- Follow-up, deliberately out of scope here: the new AGENTS.md rule "Never use the em dash" is contradicted by 8 pre-existing em dashes the branch does not touch. Three are runtime strings the captain actually reads - bin/fm-supervise-daemon.sh:654 (supervisor escalate message), :924 (wedge display-message), :1426 (pane auto-discovery warning) - and five are code comments: bin/fm-supervise-daemon.sh:2, :413, :436 and bin/fm-tmux-lib.sh:2, :218. Two test occurrences (tests/fm-daemon.test.sh:1116 comment, tests/fm-public-followup.test.sh:210 multibyte fixture) are also present; the fixture is intentional. I left all of them alone: the runtime strings are executable behavior this phase must not change, and fixing only the comments would leave the captain-facing output still violating the rule. Worth one small follow-up change that sweeps comments and strings together. The single em dash in AGENTS.md:16 is correct as written - it is inside the quoted rule that forbids the character.🔧 **Lint** - 1 issue found → auto-fixed ✅
🔧 Fix: lint clean; no code changes needed
✅ Re-checked - no issues remain.
✅ **Push** - passed
✅ No issues found.