Build #438 slice 2: subagent-start composes the dispatch brief #441

Closed
opened 2026-08-20 14:31:11 +00:00 by jared · 2 comments
Owner

Parent

#438 (map-driven os-sdlc runner build spec). Design: docs/os-sdlc-rebuild/map-runner-design.md. Settled decisions + guard-manifest process: docs/os-sdlc-rebuild/interface-sketches.md.

Pre-build gate

First step before any code: run the seam-design pass per docs/os-sdlc-rebuild/seam-design-prompt.md to produce this slice's interface sketch. The sketch is the guard manifest: any class, public method, or signature change beyond it → stop, comment on this ticket, do not write it.

What to build

The E4 entrypoint gives a starting agent its brief: claims the pending handoff for the implementation (empty for the entry agent), composes node instructions plus the enrichments the node's map data names (ticket_brief for the entry node), and creates the dispatch row referencing the claimed handoff in one insert (ADR-0135). The entry agent's brief carries the original ticket instructions. Sketch-time decision to settle: whether a node's instructions value is literal text or a file path.

Acceptance criteria

  • Entry agent receives a brief containing ticket instructions with an empty handoff section
  • Every dispatched agent gets a brief, even when the handoff is empty
  • Dispatch row references the claimed handoff (received_handoff_id) in a single insert
  • Tests assert brief content and stamped fields via the public entrypoint

Blocked by

Origin

  • Trigger: /to-tickets decomposition of #438 (2026-08-20, user-directed)
  • Improvised this session: none
  • Chain: DESIGN (docs/os-sdlc-rebuild/map-runner-design.md, docs/os-sdlc-rebuild/interface-sketches.md, ADR-0133/0134/0135)
  • Root candidate: #438
## Parent #438 (map-driven os-sdlc runner build spec). Design: docs/os-sdlc-rebuild/map-runner-design.md. Settled decisions + guard-manifest process: docs/os-sdlc-rebuild/interface-sketches.md. ## Pre-build gate First step before any code: run the seam-design pass per docs/os-sdlc-rebuild/seam-design-prompt.md to produce this slice's interface sketch. The sketch is the guard manifest: any class, public method, or signature change beyond it → stop, comment on this ticket, do not write it. ## What to build The E4 entrypoint gives a starting agent its brief: claims the pending handoff for the implementation (empty for the entry agent), composes node instructions plus the enrichments the node's map data names (ticket_brief for the entry node), and creates the dispatch row referencing the claimed handoff in one insert (ADR-0135). The entry agent's brief carries the original ticket instructions. Sketch-time decision to settle: whether a node's instructions value is literal text or a file path. ## Acceptance criteria - [ ] Entry agent receives a brief containing ticket instructions with an empty handoff section - [ ] Every dispatched agent gets a brief, even when the handoff is empty - [ ] Dispatch row references the claimed handoff (received_handoff_id) in a single insert - [ ] Tests assert brief content and stamped fields via the public entrypoint ## Blocked by - #440 ## Origin - Trigger: /to-tickets decomposition of #438 (2026-08-20, user-directed) - Improvised this session: none - Chain: DESIGN (docs/os-sdlc-rebuild/map-runner-design.md, docs/os-sdlc-rebuild/interface-sketches.md, ADR-0133/0134/0135) - Root candidate: #438
Author
Owner

Work started: building slice 2 via the TDD loop on branch build/438-slice-2. Seam-design sketch approved with D14 (implementation-scoped unclaimed-only handoff claim, schema 7), D15 (StartSubagent + Arrival + BriefComposer/BriefFacts), D16 option C (instructions literal + optional brief: path).

Work started: building slice 2 via the TDD loop on branch build/438-slice-2. Seam-design sketch approved with D14 (implementation-scoped unclaimed-only handoff claim, schema 7), D15 (StartSubagent + Arrival + BriefComposer/BriefFacts), D16 option C (instructions literal + optional brief: path).
Author
Owner

Resolution

Done: Slice 2 built TDD-first on build/438-slice-2, merged to main (commit 947ea98, merge 441a8ed). E4 subagent-start claims the implementation's oldest unclaimed handoff (schema 7, implementation-scoped, D14), composes the dispatch brief from the map node's literal instructions plus its optional brief: file (D16 option C) and the ticket body via the tracker port, and creates the dispatch row in one insert. StartSubagent/Arrival/BriefComposer/BriefFacts per D15; old RoundCommands helpers deleted.

Evidence: ruby -Ilib tests/all.rb: 817 runs, 2094 assertions, 0 failures (verified by orchestrator; 6 new CLI tests incl. claim scoping, unclaimed-only, single-insert, missing_brief_file exit 3). rubocop zero offenses on all slice-touched files, no disables. No real tea/network calls in tests.

Follow-ups: BriefComposer's facts: constructor param is currently unused (ticket assembly lives in StartSubagent); the slice-3 seam-design pass must either use it or amend the sketch to drop it. Handoff.agent_type producer-vs-target semantics deferred to slice 3 by the sketch. Both are owned by the slice-3 seam pass on existing ticket #442; no new tickets filed.

## Resolution **Done:** Slice 2 built TDD-first on build/438-slice-2, merged to main (commit 947ea98, merge 441a8ed). E4 subagent-start claims the implementation's oldest unclaimed handoff (schema 7, implementation-scoped, D14), composes the dispatch brief from the map node's literal instructions plus its optional brief: file (D16 option C) and the ticket body via the tracker port, and creates the dispatch row in one insert. StartSubagent/Arrival/BriefComposer/BriefFacts per D15; old RoundCommands helpers deleted. **Evidence:** ruby -Ilib tests/all.rb: 817 runs, 2094 assertions, 0 failures (verified by orchestrator; 6 new CLI tests incl. claim scoping, unclaimed-only, single-insert, missing_brief_file exit 3). rubocop zero offenses on all slice-touched files, no disables. No real tea/network calls in tests. **Follow-ups:** BriefComposer's facts: constructor param is currently unused (ticket assembly lives in StartSubagent); the slice-3 seam-design pass must either use it or amend the sketch to drop it. Handoff.agent_type producer-vs-target semantics deferred to slice 3 by the sketch. Both are owned by the slice-3 seam pass on existing ticket #442; no new tickets filed.
jared closed this issue 2026-08-20 19:41:38 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#441
No description provided.