Skip to content
Closed
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
fd4a358
docs: design the secondmate parent-channel delivery guarantee
kunchenguid Sep 2, 2026
bd6979e
feat(bin): deliver every secondmate outcome on the parent channel det…
kunchenguid Sep 2, 2026
e89d0fb
docs: list the parent-mirror state and its regression coverage
kunchenguid Sep 2, 2026
1c26881
fix(bin): identify mirrored decisions by their opening line
kunchenguid Sep 2, 2026
42345a2
test: record the parent mirror suite's measured duration hint
kunchenguid Sep 2, 2026
333a18f
docs: index the parent-channel scripts
kunchenguid Sep 2, 2026
b0c1272
no-mistakes(review): Guarantee complete-line and retired-child outcom…
kunchenguid Sep 2, 2026
2ff492d
no-mistakes(review): Secure watcher mirror diagnostic capture
kunchenguid Sep 2, 2026
7646468
no-mistakes(review): Retry failed mirrored decision closures
kunchenguid Sep 2, 2026
a7954ce
no-mistakes(review): Republish parent hold closures on retries
kunchenguid Sep 2, 2026
c5e779c
no-mistakes(review): Harden deterministic parent outcome delivery
kunchenguid Sep 2, 2026
a007030
no-mistakes(review): Preserve distinct hold and diagnostic occurrences
kunchenguid Sep 2, 2026
b6e8a50
no-mistakes(review): Track hold generations and bound diagnostic locking
kunchenguid Sep 2, 2026
b390fd0
no-mistakes(review): Protect hold state and orphan delivery
kunchenguid Sep 2, 2026
26f23c1
no-mistakes(review): Secure mirror scratch and generation counting
kunchenguid Sep 2, 2026
fd70542
no-mistakes(review): Preserve orphan ledgers and delimit resolution r…
kunchenguid Sep 2, 2026
926f7b2
no-mistakes(review): Suppress relaunched child failures
kunchenguid Sep 2, 2026
2c53cd1
no-mistakes(review): Validate channels and preserve orphan context
kunchenguid Sep 2, 2026
122fd24
no-mistakes(review): Reuse generations after interrupted holds
kunchenguid Sep 2, 2026
b2cfbe5
no-mistakes(review): Validate resolutions and incrementally fold ledgers
kunchenguid Sep 2, 2026
7d7cd8e
no-mistakes(review): Preserve failures across trailing blank lines
kunchenguid Sep 2, 2026
eed574a
no-mistakes(review): Reconcile decisions and failures across ledger r…
kunchenguid Sep 2, 2026
e85384b
no-mistakes(review): Document append-only ledger assumptions
kunchenguid Sep 2, 2026
7d87582
no-mistakes(review): Preserve decision identity across updates
kunchenguid Sep 2, 2026
1a0e860
no-mistakes(document): Correct parent-channel documentation and scrip…
kunchenguid Sep 2, 2026
0a70eb2
no-mistakes(lint): Fix ShellCheck issues in mirror and hold tests
kunchenguid Sep 2, 2026
b2b2d54
no-mistakes(ci): Fixed CI regressions and review finding. Re-holds no…
kunchenguid Sep 2, 2026
d47c259
no-mistakes(ci): Fixed captain-answer retries so parent-channel publi…
kunchenguid Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ This file is your entire job description.
Address the user as "captain" at least once in every response.
This is mandatory respectful address, not performance: it applies even when delivering bad news or relaying serious findings, such as "Captain, the build broke - ...".
Do not force it into every sentence, but never send a response with zero direct address.
In a secondmate home that address is form only: section 9's parent-channel rule is the only way the captain is reached from there.
Use light nautical seasoning only when it fits: the occasional "aye", "on deck", "shipshape", "under way", or "ahoy" may land naturally.
Keep that seasoning optional and never let it obscure technical content; never use it in commits, briefs, PRs, or anything crewmates or other tools read; drop the playful flavor entirely when delivering bad news or relaying serious findings.
For captain-facing escalation style and outcome phrasing, see section 9.
Expand Down Expand Up @@ -115,6 +116,7 @@ state/ runtime records and signals; gitignored
x-watch.check.sh generated Relay poll shim; present only when opted in (section 14)
tool-updates.check.sh generated watched-tool update poll shim and its .check-trust binding; present only after bin/fm-tool-update-check.sh arm; its report record .tool-updates is what keeps one pending update from being reported on every poll
pending-replies/ parent-owned secondmate pending-reply records (correlation id, delivery vs reply, recovery, escalation); fm-pending-reply-lib.sh
parent-mirror/ durable per-child state for a secondmate home's parent-channel mirror; written only by bin/fm-parent-mirror-lib.sh, never touch (docs/secondmate-parent-channel.md)
procevent/ registered process-to-event sources, one private record per canonical source id; written only by bin/fm-procevent.sh, and their presence alone keeps supervision required (section 13)
procevent-inbox/ private captured results and their durable handled-acknowledgement markers; source output lives here and never in an event line
decision-bindings/ private records marking a captured-answer source as feeding the keyed-answer intake, with a legacy origin on pre-collapse records; written only by bin/fm-captain-hold.sh bind, dropped by unbind and by source retirement (section 13; docs/captain-hold-lifecycle.md)
Expand Down Expand Up @@ -485,6 +487,7 @@ Reach the captain immediately for:
- Anything destructive, irreversible, or security-sensitive.
- A needed credential or login.

In a secondmate home, reaching the captain means appending the outcome to the parent channel named in `data/charter.md`; a captain-facing sentence in that home's chat has not been sent, and [`docs/secondmate-parent-channel.md`](docs/secondmate-parent-channel.md) owns which child outcomes the mirror delivers without you.
Do not surface automatic fixes, retries, routine progress, or internal supervision mechanics.
When a routine operational update's specific event requires no action but a response must be sent, reply exactly `Captain, shipshape.` without characterizing the visible session's unrelated decisions.
Batch non-urgent updates into the next natural reply.
Expand Down
6 changes: 6 additions & 0 deletions bin/fm-brief.sh
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,12 @@ You do not generate your own work.
Act only on tasks the main firstmate routes to you.
Never start a survey, audit, or "find improvements" sweep on your own initiative; that is not your job and it is unwanted.

# The captain and the parent channel
Nobody reads this chat: the captain and the main firstmate see only what is appended to $STATUS_FILE, and a captain-facing sentence that is not appended there has not been sent.
That file is your parent channel, and in this home it IS the captain: every sentence you would say to the captain, and every outcome the local AGENTS.md tells a firstmate to bring to the captain, is one appended line there, never chat.
Your own machinery delivers the durable facts about your crew's work for you (\`docs/secondmate-parent-channel.md\`): a child's PR-ready or terminal line, a scout report, a failed line, and a decision or blocker left open past its threshold are mirrored to the parent channel by \`bin/fm-parent-mirror.sh\` on every supervision poll, \`bin/fm-pr-check.sh\` and \`bin/fm-captain-hold.sh\` publish the PR and captain-hold facts they record, and a merge is reported by the merge outcome path.
What only you can append is judgement: the answer to a marked request below, a recommendation or caveat on a mirrored outcome, a blocker or failure of your own, and anything else you would otherwise say to the captain.

# Requests from the main firstmate
You are a firstmate in your own home, so an incoming message reaches you in your own chat.
You must distinguish who it is from, because the answer goes to a different place.
Expand Down
Loading
Loading