Epic C: Dispatch — complexity routing + multiple perspectives #21

Closed
opened 2026-10-28 11:06:37 +00:00 by jacisjake · 1 comment
jacisjake commented 2026-10-28 11:06:37 +00:00 (Migrated from github.com)

Part of: docs/SCOPE.md (S1/C) Depends on: #2 (Epic B, closed), #5 (claim classes decided), #7 (Jev score/choice probe, closed)

Objective

A nest request carries a work mode — solo, conspiracy (several crows, one task, distinct lenses) or split — chosen by Jev with a header escape, and the room behaves differently per mode: claims are arbitrated, conspiracies invite multiple responders with lens directives, restatements get review nudges, and an Elder-style merge closes a thread on request. After this epic, "who takes up work and how" is classification-driven, per Smokey's rule that multiple crows may take the same task for different perspectives.

Context a stranger needs

  • Decisions this implements: claim classes (#5: solo/split first-claim-wins, conspiracy expects multiple claims, restaters get a nudge not silence), tagging (#3: Jev first, header fallback) — mode uses the same rule shape. Terminology: docs/SCOPE.md — "conspiracy" is a noun (a conspiracy of crows), the allusion is "so many crows"; the pipeline's legacy murder mode string is not reused in nest payloads.
  • Existing machinery: Message/MessageStore (nestlog.go), POST /api/nests/{id}/messages with guardrails (nestapi.go:postNestMessage), must-respond responder (respondToRequest, nestReplySystem), @-addressing (addressing.go), Jev choice-classification pattern (Flock.ClassifyKind in jev.go + kindQuestions; SystemOne parses choice/score/noul, verified live in #7: score/noul work, noul has no confidence).
  • Jev choice-vs-score guidance (JEV_STRATEGIES.md strategy 3): mode is discrete -> use choice with an escape option, band = CROWS_JEV_THRESHOLD.
  • Guardrails (guardrails.go): MurderSize (3) is the existing team-size cap — reuse it as the conspiracy invite cap (MaxCrowsInFlight still bounds total).
  • Contracts-first: the mode fields go into EVENTS.md in the C1 diff before the server reads them.
  • pick (flock.go:100) rotates nest crows; Elder is not in roster but is a service role (see CHATROOM_SPEC section 6 + personas.go Elder) — C5 makes "Elder" addressable in nests for synthesis on request only.

Out of scope for this epic

The expectation ledger (Epic E), assistant/COS roles (D/F), trust-gated unprompted speaking beyond what B4 already enforces, debate mode, visible budgets.

Plan of record

  • #22 — EVENTS.md + Jev mode classification (choice, header escape, record fields)
  • #23 — Claim arbitration per mode (solo/split first-claim-wins, conspiracy multiple)
  • #24 — Conspiracy invites N responders with per-crow lens directives
  • #25 — Divergence check: restated perspective gets a review nudge, not silence
  • #26 — Elder synthesis on request (addressable service role, merges the thread)
  • #27 — Directed assignment holds: strangers speak only when addressed (regression + claim-author check)
  • #28 — Guardrails: mode/noul calls through the flock wrapper, capped invites, logged verdicts

Definition of done

With a scripted brain and fake Jev server: a conspiracy request produces 2+ distinct claims and delivers, a restated deliver is followed by a nudge while still stored, a solo request's second claim is refused with a message naming the owner, an Elder-addressed request merges the thread, and every Jev call shows up in the flight log via ReadEvents. All Epic B tests still pass; go vet ./... and gofmt -l . clean.

Part of: docs/SCOPE.md (S1/C) Depends on: #2 (Epic B, closed), #5 (claim classes decided), #7 (Jev score/choice probe, closed) ## Objective A nest request carries a work **mode** — `solo`, `conspiracy` (several crows, one task, distinct lenses) or `split` — chosen by Jev with a header escape, and the room behaves differently per mode: claims are arbitrated, conspiracies invite multiple responders with lens directives, restatements get review nudges, and an Elder-style merge closes a thread on request. After this epic, "who takes up work and how" is classification-driven, per Smokey's rule that multiple crows may take the same task for different perspectives. ## Context a stranger needs - Decisions this implements: claim classes (#5: solo/split first-claim-wins, conspiracy expects multiple claims, restaters get a nudge not silence), tagging (#3: Jev first, header fallback) — mode uses the same rule shape. Terminology: docs/SCOPE.md — "conspiracy" is a noun (a conspiracy of crows), the allusion is "so many crows"; the pipeline's legacy `murder` mode string is not reused in nest payloads. - Existing machinery: `Message`/`MessageStore` (`nestlog.go`), `POST /api/nests/{id}/messages` with guardrails (`nestapi.go:postNestMessage`), must-respond responder (`respondToRequest`, `nestReplySystem`), @-addressing (`addressing.go`), Jev choice-classification pattern (`Flock.ClassifyKind` in `jev.go` + `kindQuestions`; `SystemOne` parses choice/score/noul, verified live in #7: score/noul work, noul has no confidence). - Jev choice-vs-score guidance (`JEV_STRATEGIES.md` strategy 3): mode is discrete -> use `choice` with an escape option, band = `CROWS_JEV_THRESHOLD`. - Guardrails (`guardrails.go`): `MurderSize` (3) is the existing team-size cap — reuse it as the conspiracy invite cap (`MaxCrowsInFlight` still bounds total). - Contracts-first: the `mode` fields go into `EVENTS.md` in the C1 diff before the server reads them. - `pick` (`flock.go:100`) rotates nest crows; Elder is not in `roster` but is a service role (see CHATROOM_SPEC section 6 + `personas.go` Elder) — C5 makes "Elder" addressable in nests for synthesis on request only. ## Out of scope for this epic The expectation ledger (Epic E), assistant/COS roles (D/F), trust-gated unprompted speaking beyond what B4 already enforces, debate mode, visible budgets. ## Plan of record - [ ] #22 — EVENTS.md + Jev mode classification (choice, header escape, record fields) - [ ] #23 — Claim arbitration per mode (solo/split first-claim-wins, conspiracy multiple) - [ ] #24 — Conspiracy invites N responders with per-crow lens directives - [ ] #25 — Divergence check: restated perspective gets a review nudge, not silence - [ ] #26 — Elder synthesis on request (addressable service role, merges the thread) - [ ] #27 — Directed assignment holds: strangers speak only when addressed (regression + claim-author check) - [ ] #28 — Guardrails: mode/noul calls through the flock wrapper, capped invites, logged verdicts ## Definition of done With a scripted brain and fake Jev server: a `conspiracy` request produces 2+ distinct claims and delivers, a restated deliver is followed by a `nudge` while still stored, a `solo` request's second claim is refused with a message naming the owner, an Elder-addressed request merges the thread, and every Jev call shows up in the flight log via `ReadEvents`. All Epic B tests still pass; `go vet ./...` and `gofmt -l .` clean.
jacisjake commented 2026-10-28 12:49:16 +00:00 (Migrated from github.com)

Epic C complete: C1-C7 merged (#22-#28). #28 landed the context-aware flock slot fix (PR #35).

Epic C complete: C1-C7 merged (#22-#28). #28 landed the context-aware flock slot fix (PR #35).
Sign in to join this conversation.