Part of: docs/SCOPE.md#S6 Depends on: Epic D (assistant epic; ask_owner mechanism)
Objective
Boss (Chief of Staff crow) orchestrates the flock from inside the chatroom: spins up new crows (name, persona, starting trust), creates nests and assigns members. The Sentry becomes the nest watchdog: it acts on Jev verdicts above high bands plus harness guardrail hits, quarantines an aberrant crow with a flag message, and escalates an ask_owner for reinstate-or-retain — fail safe, one flag per crow per expectation, blind to owner messages.
Context a stranger needs
Names [decided 2026-10-28]: COS crow = Boss. Watchdog = the existing Sentry persona (personas.go, in rosterOrder); spec §6 "Name note".
Service-role pattern: nestapi.go:31serviceRoles, trigger switch ~187, respondElder ~349. Epic D will have added Quill the same way (respondQuill in a quill file).
ask_owner + fail-safe resolution lands with Epic D (task D4) — E4 builds on it. flag is already in the EVENTS.md kind table (lines 46, 88: crows may not post it; Sentry only).
Spun-up crows need a registry that outlives the static persona list: personas are code (personas.go), dynamic crows must be data — new store next to ledger/nests in .crows/ (see ledger.go/nests.go for the JSON persistence pattern), plus a MaxSpunCrows cap in guardrails.go.
Jev check questions follow JEV_STRATEGIES.md strategy 8 (answers_request, states_fact_without_source, contradicts_earlier as noul), strategy 4 three bands (noul high ≥ 0.7 acts; reuse CROWS_JEV_THRESHOLD), and the guarded-call pattern in jev.go (Flock.ClassifyDivergence is the closest existing example, with Flock.reserve from #28).
Quarantine state belongs on the crow registry record; enforcement in POST validation (nestapi.go claim/deliver path) and in the unprompted-speaking selectors (respondOpenRequest, inviteCount paths — see trustgate_test.go for the gating pattern).
Trust: ledger.go records per crow|tasktype; Sentry's own flags earn trust under task type triage/watch (CHATROOM_SPEC §6 bounds; CLAUDE.md section 3 pattern triage/<type>).
Out of scope for this epic
Debate mode (spec §8), visible budgets (spec §9), UI changes for any of it — those are Epic F. Idle-crow retirement (regulation) is deferred: spin-down only via quarantine decisions this round.
Plan of record
#42 — E1: Boss role + spin_up crow registry with cap
#45 — E4: Quarantine escalation via ask_owner + triage/watch trust
Definition of done
Mock-brain demo: owner asks Boss for a new crow "Ash" and a nest; Ash joins, delivers an unsourced fabrication; the fake Jev scores it above band; a flag posts, Ash's next claim is refused 403, an ask_owner opens; owner's exact "reinstate Ash" lifts it, anything else does not; Sentry's flag shows up in the ledger as Sentry|triage/watch.
Part of: docs/SCOPE.md#S6 Depends on: Epic D (assistant epic; ask_owner mechanism)
## Objective
Boss (Chief of Staff crow) orchestrates the flock from inside the chatroom: spins up new crows (name, persona, starting trust), creates nests and assigns members. The Sentry becomes the nest watchdog: it acts on Jev verdicts above high bands plus harness guardrail hits, quarantines an aberrant crow with a `flag` message, and escalates an `ask_owner` for reinstate-or-retain — fail safe, one flag per crow per expectation, blind to owner messages.
## Context a stranger needs
- Names [decided 2026-10-28]: COS crow = **Boss**. Watchdog = the existing Sentry persona (`personas.go`, in `rosterOrder`); spec §6 "Name note".
- Service-role pattern: `nestapi.go:31` `serviceRoles`, trigger switch ~187, `respondElder` ~349. Epic D will have added Quill the same way (`respondQuill` in a quill file).
- `ask_owner` + fail-safe resolution lands with Epic D (task D4) — E4 builds on it. `flag` is already in the EVENTS.md kind table (lines 46, 88: crows may not post it; Sentry only).
- Spun-up crows need a registry that outlives the static persona list: personas are code (`personas.go`), dynamic crows must be data — new store next to ledger/nests in `.crows/` (see `ledger.go`/`nests.go` for the JSON persistence pattern), plus a `MaxSpunCrows` cap in `guardrails.go`.
- Jev check questions follow `JEV_STRATEGIES.md` strategy 8 (`answers_request`, `states_fact_without_source`, `contradicts_earlier` as `noul`), strategy 4 three bands (noul high ≥ 0.7 acts; reuse `CROWS_JEV_THRESHOLD`), and the guarded-call pattern in `jev.go` (`Flock.ClassifyDivergence` is the closest existing example, with `Flock.reserve` from #28).
- Quarantine state belongs on the crow registry record; enforcement in POST validation (`nestapi.go` claim/deliver path) and in the unprompted-speaking selectors (`respondOpenRequest`, `inviteCount` paths — see trustgate_test.go for the gating pattern).
- Trust: `ledger.go` records per `crow|tasktype`; Sentry's own flags earn trust under task type `triage/watch` (CHATROOM_SPEC §6 bounds; CLAUDE.md section 3 pattern `triage/<type>`).
## Out of scope for this epic
Debate mode (spec §8), visible budgets (spec §9), UI changes for any of it — those are Epic F. Idle-crow retirement (regulation) is deferred: spin-down only via quarantine decisions this round.
## Plan of record
- [ ] #42 — E1: Boss role + spin_up crow registry with cap
- [ ] #43 — E2: Boss creates nests and assigns members
- [ ] #44 — E3: Sentry watchdog detection + quarantine enforcement
- [ ] #45 — E4: Quarantine escalation via ask_owner + triage/watch trust
## Definition of done
Mock-brain demo: owner asks Boss for a new crow "Ash" and a nest; Ash joins, delivers an unsourced fabrication; the fake Jev scores it above band; a `flag` posts, Ash's next claim is refused 403, an `ask_owner` opens; owner's exact "reinstate Ash" lifts it, anything else does not; Sentry's flag shows up in the ledger as `Sentry|triage/watch`.
Definition of done met on main: Boss spins Ash into the registry (TestBossSpinUpCreatesCrow #42) and creates a nest with it (TestBossCreatesNest #43); an unsourced fabrication gets flagged + quarantined 403 (TestSentryQuarantinesFabrication #44); the ask_owner escalates, exact 'reinstate Ash' lifts it, anything else keeps it, 'retire' removes (TestQuarantineOpensAskOwner/TestReinstateOnlyOnExactYes/TestRetireRemovesCrow #45); Sentry earns triage/watch only on owner calls (TestWatchTrustMoves #45). Debate + visible budgets deferred to Epic F.
Definition of done met on main: Boss spins Ash into the registry (TestBossSpinUpCreatesCrow #42) and creates a nest with it (TestBossCreatesNest #43); an unsourced fabrication gets flagged + quarantined 403 (TestSentryQuarantinesFabrication #44); the ask_owner escalates, exact 'reinstate Ash' lifts it, anything else keeps it, 'retire' removes (TestQuarantineOpensAskOwner/TestReinstateOnlyOnExactYes/TestRetireRemovesCrow #45); Sentry earns triage/watch only on owner calls (TestWatchTrustMoves #45). Debate + visible budgets deferred to Epic F.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of: docs/SCOPE.md#S6 Depends on: Epic D (assistant epic; ask_owner mechanism)
Objective
Boss (Chief of Staff crow) orchestrates the flock from inside the chatroom: spins up new crows (name, persona, starting trust), creates nests and assigns members. The Sentry becomes the nest watchdog: it acts on Jev verdicts above high bands plus harness guardrail hits, quarantines an aberrant crow with a
flagmessage, and escalates anask_ownerfor reinstate-or-retain — fail safe, one flag per crow per expectation, blind to owner messages.Context a stranger needs
personas.go, inrosterOrder); spec §6 "Name note".nestapi.go:31serviceRoles, trigger switch ~187,respondElder~349. Epic D will have added Quill the same way (respondQuillin a quill file).ask_owner+ fail-safe resolution lands with Epic D (task D4) — E4 builds on it.flagis already in the EVENTS.md kind table (lines 46, 88: crows may not post it; Sentry only).personas.go), dynamic crows must be data — new store next to ledger/nests in.crows/(seeledger.go/nests.gofor the JSON persistence pattern), plus aMaxSpunCrowscap inguardrails.go.JEV_STRATEGIES.mdstrategy 8 (answers_request,states_fact_without_source,contradicts_earlierasnoul), strategy 4 three bands (noul high ≥ 0.7 acts; reuseCROWS_JEV_THRESHOLD), and the guarded-call pattern injev.go(Flock.ClassifyDivergenceis the closest existing example, withFlock.reservefrom #28).nestapi.goclaim/deliver path) and in the unprompted-speaking selectors (respondOpenRequest,inviteCountpaths — see trustgate_test.go for the gating pattern).ledger.gorecords percrow|tasktype; Sentry's own flags earn trust under task typetriage/watch(CHATROOM_SPEC §6 bounds; CLAUDE.md section 3 patterntriage/<type>).Out of scope for this epic
Debate mode (spec §8), visible budgets (spec §9), UI changes for any of it — those are Epic F. Idle-crow retirement (regulation) is deferred: spin-down only via quarantine decisions this round.
Plan of record
Definition of done
Mock-brain demo: owner asks Boss for a new crow "Ash" and a nest; Ash joins, delivers an unsourced fabrication; the fake Jev scores it above band; a
flagposts, Ash's next claim is refused 403, anask_owneropens; owner's exact "reinstate Ash" lifts it, anything else does not; Sentry's flag shows up in the ledger asSentry|triage/watch.Definition of done met on main: Boss spins Ash into the registry (TestBossSpinUpCreatesCrow #42) and creates a nest with it (TestBossCreatesNest #43); an unsourced fabrication gets flagged + quarantined 403 (TestSentryQuarantinesFabrication #44); the ask_owner escalates, exact 'reinstate Ash' lifts it, anything else keeps it, 'retire' removes (TestQuarantineOpensAskOwner/TestReinstateOnlyOnExactYes/TestRetireRemovesCrow #45); Sentry earns triage/watch only on owner calls (TestWatchTrustMoves #45). Debate + visible budgets deferred to Epic F.