fix: deliver the handoff brief to the slash commands - #24
Merged
Conversation
Session handoff briefing was listed as aspirational. It was not. All seventeen personas have carried a Handoff Brief section since they were written, with byte-identical opening and closing stems, and both coordinator profiles instruct the coordinator to ask the outgoing persona for one at a switch. Three DEVLOG entries treat "3 behaviors + handoff" as a structural invariant. The roadmap entry was written by paraphrasing the shipped robin.md text. The defect was delivery, and it landed on the worst surface. The section sat inside Required Interactive Behaviors, which strip_interactive_behaviors excises from every slash command, so 0 of 17 commands carried it against 17 of 17 agents. coordinator.md tells the user to run /<name> at the exact moment of a handoff and then instructs the coordinator to ask that persona for a brief. The asker had the instruction; the answerer, on the recommended path, did not. The section is now a top-level ## Handoff Brief, which codifies what the structure already implied: it was deliberately left unnumbered while its siblings are ### 1., ### 2., ### 3. The stripper's end marker moves from ## Signature Question to ## Handoff Brief, so the excised range ends one section earlier and the brief survives. Position in the profile is unchanged. The generator now aborts on a profile with no ## Handoff Brief, matching the existing ## Greeting guard. This is not ceremony: the stripper resets its skip flag on that marker, so a profile without it would silently drop every later section from the slash command. The same failure mode exists today with ## Signature Question and goes unnoticed only because all seventeen have one. The commands drift test asserted the absence as correct, since its awk mirrors the stripper. Both moved together. Parallel sessions had the same shape of gap. A session prompt carried Persona, Task, and File scope, and nothing about what had already been decided, so each session re-derived context it was never given. Both coordinator profiles and commands/parallel.md gain a fourth Context field, and a finished session with dependents now writes a Handoff Brief that becomes the downstream session's Context. Prompt-only: no new files, no stored state, no CLI surface. Five tests added, all five failing on the previous tree. One of them removes the section from a profile in a throwaway copy and requires the generator to refuse, so the guard is proven rather than assumed. ROADMAP and README move the entry from aspirational to shipped. That empties the aspirational list, which now reads as an invitation to open an issue rather than an empty heading. Existing dated revision rows are unchanged. 175 tests, up from 170. shellcheck clean. Agents changed by exactly one heading level per file and nothing else. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019j5DHEZsoeCGRueTbNLuTb
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.
Session handoff briefing was listed as aspirational. It was already built. Planning this turned it inside out.
175 tests (was 170). shellcheck clean.
What was actually there
### Handoff Brief/nameslash commands carrying itByte-identical opening and closing stems across all seventeen. Three DEVLOG entries treat "3 behaviors + handoff" as a structural invariant. The ROADMAP entry was written by paraphrasing the already-shipped
robin.mdtext.The defect, and why it landed on the worst possible surface
### Handoff Briefsat inside## Required Interactive Behaviors, whichstrip_interactive_behaviorsexcises from every slash command.profiles/coordinator.md:126tells the user, at the exact moment of a handoff:and
:128then instructs the coordinator to ask that persona for a Handoff Brief.The asker had the instruction. The answerer, on the path the coordinator itself recommends, had never been told what a Handoff Brief is. It would have to improvise from the coordinator's one-line description.
The fix
### Handoff Briefbecomes## Handoff Brief. This codifies what the structure already implied — the section was deliberately left unnumbered while its siblings are### 1.,### 2.,### 3.The stripper's end marker moves from
## Signature Questionto## Handoff Brief, so the excised range ends one section earlier. Position in the profile is unchanged.Generator guard added. The generator now aborts on a profile with no
## Handoff Brief, matching the existing## Greetingguard. Not ceremony: the stripper resetsskipon that marker, so a profile without it would silently drop every later section from the slash command. The same latent failure mode exists today with## Signature Questionand goes unnoticed only because all seventeen happen to have one.The drift test asserted the gap as correct, since its awk mirrors the stripper. Both moved in lockstep.
Parallel sessions had the same shape of gap
A session prompt carried Persona, Task, File scope and nothing about what had already been decided, so each session re-derived context it was never given. The
/paralleltemplate also seeds sessions with/akira— the same stripped surface.Both coordinator profiles and
commands/parallel.mdgain a fourth Context field. A finished session with dependents writes a Handoff Brief that becomes the downstream session's Context.Prompt-only, per your call: no new files, no stored state, no CLI surface. That also keeps it clear of the shared-state locking the branch index needed.
Verification
### Handoff Brief→## Handoff Briefand nothing more.cmd_usecarrying it into the global pin.Roadmap
Moved from aspirational to shipped. That empties the aspirational list, since the other two items were retired in #23, so it now reads as an invitation to open an issue rather than an empty heading. Existing dated revision rows unchanged.
Generated by Claude Code