docs: make no-mistakes a captain-only choice; default remote projects to direct-PR - #7
Merged
Merged
Conversation
added 2 commits
September 18, 2026 17:29
… to direct-PR Firstmate no longer selects the no-mistakes pipeline at intake on any surface classification. A task ships no-mistakes only when the captain requests it for that task or asked to register it as the project's posture; otherwise remote projects ship direct-PR and remoteless ones local-only. The conditional no-mistakes-prod-only registry value is retired and reads as direct-PR, and the registry parser's unregistered, legacy, and unknown-mode fallbacks now resolve to direct-PR so no default path ever selects or initializes the pipeline. The pipeline, its skill, and its mechanics are unchanged, and merge authority is untouched.
…peline initialization
There was a problem hiding this comment.
🟡 Changes recommended
The unresolved critical repository-policy conflict and moderate legacy-mode lookup issue block approval.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
This PR makes direct-PR the default for remote projects, preserves local-only for projects without remotes, and uses no-mistakes only when explicitly requested or registered by the captain.
Changes:
- Updates delivery policy, project-management guidance, contributor documentation, and architecture notes.
- Maps missing, unknown, bare, and retired modes to
direct-PR. - Updates scripts, initialization behavior, and regression tests.
Open findings include a critical (2 votes) repository-policy conflict, a moderate (1 vote) legacy-mode lookup issue, and nits (1 vote each) involving stale references and messaging.
File summaries
| File | Summary |
|---|---|
tests/fm-task-delivery.test.sh |
Updates parser and delivery-default coverage. |
tests/fm-secondmate-safety.test.sh |
Uses explicit pipeline posture fixtures. |
tests/fm-secondmate-lifecycle-e2e.test.sh |
Updates lifecycle posture fixtures. |
tests/fm-brief.test.sh |
Updates mode-refusal expectations. |
docs/architecture.md |
Documents updated registry behavior. |
CONTRIBUTING.md |
Documents the direct-PR workflow. |
bin/fm-spawn.sh |
Updates retired-mode handling and posture warnings. |
bin/fm-promote.sh |
Updates retired-mode refusal messaging. |
bin/fm-project-mode.sh |
Changes defaults and legacy-mode mapping. |
bin/fm-fleet-sync.sh |
Uses direct-PR as the fallback posture. |
bin/fm-brief.sh |
Updates mode validation messaging. |
AGENTS.md |
Updates delivery-path and intake rules. |
.agents/skills/project-management/SKILL.md |
Defines new posture and initialization behavior. |
Review details
Suppressed comments (1)
AGENTS.md:48
- The policy change leaves
.agents/skills/stow/SKILL.md:225and:308-309saying that shared tracked material still goes through the no-mistakes/pipeline path. Because/stowis a supported route for these same changes, those instructions remain a conflicting way for firstmate to select no-mistakes and contradict this new delivery-path rule. Please update the stale cross-references as part of this change.
Ship shared tracked changes through a PR on the delivery path section 7 selects, with the same merge authority as any other project.
- Files reviewed: 8/13 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| ## Development | ||
|
|
||
| Tracked changes to firstmate itself - `AGENTS.md`, `README.md`, `CONTRIBUTING.md`, `.tasks.toml`, `.github/workflows/`, `bin/`, `.agents/skills/`, and `skills/` - ship through the `no-mistakes` pipeline on a feature branch and require an explicit merge approval. | ||
| Tracked changes to firstmate itself - `AGENTS.md`, `README.md`, `CONTRIBUTING.md`, `.tasks.toml`, `.github/workflows/`, `bin/`, `.agents/skills/`, and `skills/` - ship through a PR from a feature branch on the delivery path `AGENTS.md` section 7 selects - `direct-PR` unless the captain requests the `no-mistakes` pipeline - and require an explicit merge approval. |
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.
What
Firstmate no longer selects the no-mistakes validation pipeline by itself. For now, a task ships
no-mistakesonly when the captain explicitly requests it for that task, or asked to register it as the project's posture. Otherwise a project with a remote shipsdirect-PR, and one without a remote shipslocal-only.The pipeline, its skill, its scripts, and how it runs are unchanged. The only change is who may choose it. When it is chosen it still owns review, fixes, tests, docs, push, PR and CI, and firstmate still never answers a crew-owned run itself. Merge authority (
yolo) is untouched.Rules changed (before -> after)
AGENTS.md §1
AGENTS.md §7 intake
no-mistakes-prod-onlyproject, classify the task's surface: internal-only tooling ... shipsdirect-PR, while product-facing, mixed, and uncertain work shipsno-mistakes; never infer internal-only from file location or project name. An unregistered project or absent registry resolves tono-mistakeswith yolo off, ..."no-mistakesitself, for any project or kind of change: a task shipsno-mistakesonly when the captain explicitly requests it for that task or asked to register it as the project's posture, and otherwise shipsdirect-PR, orlocal-onlyfor a project with no remote. An unregistered project or absent registry resolves to that same default with yolo off, ..."AGENTS.md §7 delivery path
project-management skill, Delivery posture / Add / Create / Initialize
no-mistakes-prod-onlywas the default for new remote-backed projects, old entries were never migrated, and a bare entry meantno-mistakes. A new project's proposed posture defaulted tono-mistakes-prod-only. Initialization ran for everyno-mistakesandno-mistakes-prod-onlyproject.direct-PRis the default for now. Never registerno-mistakesorno-mistakes-prod-onlyunless the captain asks. The conditional posture is retired: existing entries were converted todirect-PR, and a leftover or unbracketed entry now reads asdirect-PR. A new project's proposed posture defaults todirect-PR. Initialization runs only when the captain asked, either through ano-mistakesregistration made at the captain's request or a direct request to initialize. The procedure itself is kept.CONTRIBUTING.md Development: firstmate changes ship through a PR on the §7 path,
direct-PRunless the captain requests the pipeline, and still need explicit merge approval.docs/architecture.md: the registry note now says
no-mistakesappears only at the captain's request, and the retired value reads asdirect-PR.Scripts (so no default path picks or sets up the pipeline)
bin/fm-project-mode.sh: an unregistered project, a missing registry, an unknown or typo'd mode, and a bare legacy entry now all fall back todirect-PR offinstead ofno-mistakes off. The retiredno-mistakes-prod-onlystill parses, maps todirect-PR, and--rawstill shows it. Only an explicit[no-mistakes]entry yieldsno-mistakes. Secondmate home seeding and remote provisioning therefore initialize the pipeline only for an explicit, captain-registeredno-mistakesproject.bin/fm-spawn.sh,bin/fm-brief.sh,bin/fm-promote.sh: they still refuse--mode no-mistakes-prod-only, and the error now says it is a retired value and to shipdirect-PRunless the captain requestedno-mistakes. The spawn's warning about shipping with less rigor now compares against thedirect-PRdefault.bin/fm-fleet-sync.sh: when the posture lookup fails, it falls back todirect-PR(onlylocal-onlymatters there).Search proof
grep -rnI -e prod-only -e "classify.*surface" -e product-facing -e "resolves to .no-mistakes" -e "defaulting.*no-mistakes" --exclude-dir=.git --exclude-dir=tests .now finds only retirement wording (the skill's retirement note, the parser still accepting the value, the refusal messages) and an unrelatedfm_agent_process_classifycomment. No instruction left tells firstmate to pick no-mistakes by itself.One reading to confirm
"Only the captain can request no-mistakes" is written here to cover two cases: a request for a single task, and a
no-mistakesproject posture the captain explicitly asks to register. The skill already requires the captain's explicit ask for the second. If the intent is per-task requests only, with registeredno-mistakesentries ignored at intake, that is a one-sentence change in AGENTS.md §7.Tests
tests/fm-task-delivery.test.sh: the parser test now checks that defaults, missing registries, typos, bare entries, and the retired value all read asdirect-PR, and that only an explicit[no-mistakes]reads asno-mistakes. The spawn's less-rigor warning cases and the refusal wording are updated to match.tests/fm-brief.test.sh: refusal wording.tests/fm-secondmate-safety.test.sh,tests/fm-secondmate-lifecycle-e2e.test.sh: fixtures that exercise pipeline initialization now register those projects explicitly as[no-mistakes], and the missing-registry case expectsdirect-PR off.bin/fm-lint.shandbin/fm-doc-audience-check.shalso pass.