Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
257 commits
Select commit Hold shift + click to select a range
8fe131a
Merge pull request #3 from yoni-bagelman-thenvoi/phase-2-fsm-gates
yoni-bagelman-thenvoi May 31, 2026
36b5061
Merge pull request #4 from yoni-bagelman-thenvoi/worktree-phase-3-wat…
yoni-bagelman-thenvoi May 31, 2026
924dc45
feat(state): universal agent rehydration from state store (RFC WS5, P…
yoni-bagelman-thenvoi May 31, 2026
a310715
Merge pull request #5 from yoni-bagelman-thenvoi/phase-4-rehydration
yoni-bagelman-thenvoi May 31, 2026
9961500
fix(watchdog): make the stall→blocked FSM transition actually fire
yoni-bagelman-thenvoi May 31, 2026
4efc0e4
Merge pull request #6 from yoni-bagelman-thenvoi/fix/watchdog-blocked…
yoni-bagelman-thenvoi May 31, 2026
955f4a6
fix(deps): cap click <9 and modernize CliRunner tests off removed mix…
yoni-bagelman-thenvoi May 31, 2026
41aca7e
Merge pull request #7 from yoni-bagelman-thenvoi/fix/click-mix-stderr…
yoni-bagelman-thenvoi May 31, 2026
a7f4ef9
test(rails): add integration gate for store/fsm/cb-phase/watchdog/reh…
yoni-bagelman-thenvoi May 31, 2026
f8afbc0
Merge pull request #8 from yoni-bagelman-thenvoi/test/rails-integrati…
yoni-bagelman-thenvoi May 31, 2026
fa5b39a
feat(fsm): add deterministic per-subtask review-round cap
yoni-bagelman-thenvoi May 31, 2026
2d49efc
Merge pull request #9 from yoni-bagelman-thenvoi/feat/fsm-review-roun…
yoni-bagelman-thenvoi May 31, 2026
3fa6be2
docs: add engineering brief on /codeband, jam, and deterministic orch…
yoni-bagelman-thenvoi May 31, 2026
a9d5643
feat(fsm): add deterministic per-subtask verify-attempt cap
yoni-bagelman-thenvoi May 31, 2026
2db746e
Merge pull request #10 from yoni-bagelman-thenvoi/feat/fsm-verify-att…
yoni-bagelman-thenvoi May 31, 2026
3734ebb
feat(cli): structured actionable verify errors
yoni-bagelman-thenvoi May 31, 2026
c6dcb61
feat(fsm): reviewer-verdict command (cb-phase review)
yoni-bagelman-thenvoi May 31, 2026
6a365c1
feat(watchdog): owner escalation @mention on blocked
yoni-bagelman-thenvoi May 31, 2026
292107b
Merge pull request #11 from yoni-bagelman-thenvoi/feat/p5-1b-wiring
yoni-bagelman-thenvoi May 31, 2026
acaaf3b
chore(proposed): stage final integrated prompts + knowledge for promo…
yoni-bagelman-thenvoi May 31, 2026
94515d7
Merge pull request #12 from yoni-bagelman-thenvoi/chore/stage-integra…
yoni-bagelman-thenvoi May 31, 2026
86556da
feat(handoff): auto-walk FSM to verify_pending from in_progress and r…
May 31, 2026
aa32b16
feat(prompts): promote integrated agent prompts to live
May 31, 2026
0b0021a
feat(knowledge): add engineering knowledge base with packaging
May 31, 2026
fe85ab7
feat(agents): wire knowledge injection into all agent runners
May 31, 2026
2c2ccec
test: update prompt pins, add knowledge and verify-gate integration t…
May 31, 2026
c84f546
fix(handoff): check review-round cap proactively, not via catch-all
May 31, 2026
2ec65bd
Merge pull request #13 from yoni-bagelman-thenvoi/band-of-devs/prompt…
yoni-bagelman-thenvoi May 31, 2026
def2d86
feat(watchdog): escalate blocked subtasks to the task initiator
yoni-bagelman-thenvoi May 31, 2026
f0d691a
Merge pull request #14 from yoni-bagelman-thenvoi/feat/watchdog-owner…
yoni-bagelman-thenvoi May 31, 2026
5ec3213
fix(fsm): seed subtask lifecycle via cb-phase start; verify self-crea…
yoni-bagelman-thenvoi May 31, 2026
8dfe97d
Merge pull request #15 from yoni-bagelman-thenvoi/fix/fsm-subtask-start
yoni-bagelman-thenvoi May 31, 2026
ba4bb8d
chore(conductor): drop upfront acknowledgement to task initiator
yoni-bagelman-thenvoi May 31, 2026
8189c7b
Merge pull request #16 from yoni-bagelman-thenvoi/chore/conductor-dro…
yoni-bagelman-thenvoi May 31, 2026
9df9b6e
chore(adapters): migrate deprecated adapter flags to AdapterFeatures
yoni-bagelman-thenvoi Jun 9, 2026
5acab55
Merge pull request #17 from yoni-bagelman-thenvoi/chore/adapterfeatur…
yoni-bagelman-thenvoi Jun 9, 2026
a734619
fix(handoff): resolve authoritative task_id from .codeband_room, not …
yoni-bagelman-thenvoi Jun 9, 2026
9ac9f58
Merge pull request #18 from yoni-bagelman-thenvoi/fix/cb-phase-resolv…
yoni-bagelman-thenvoi Jun 9, 2026
8926025
fix(store): scope subtask identity by task_id
yoni-bagelman-thenvoi Jun 9, 2026
2a5fb6c
Merge pull request #19 from yoni-bagelman-thenvoi/fix/task-scoped-sub…
yoni-bagelman-thenvoi Jun 9, 2026
fa79053
chore(prompts): conductor halts on gate errors; mergemaster never byp…
yoni-bagelman-thenvoi Jun 9, 2026
fefc61e
Merge pull request #20 from yoni-bagelman-thenvoi/chore/gate-bypass-h…
yoni-bagelman-thenvoi Jun 9, 2026
dda9697
chore(docs): version the /codeband slash command
yoni-bagelman-thenvoi Jun 9, 2026
b8242ff
Merge pull request #21 from yoni-bagelman-thenvoi/chore/version-codeb…
yoni-bagelman-thenvoi Jun 9, 2026
de6da06
chore(prompts): conductor reports to the task owner
yoni-bagelman-thenvoi Jun 9, 2026
1139b99
Merge pull request #22 from yoni-bagelman-thenvoi/chore/conductor-own…
yoni-bagelman-thenvoi Jun 9, 2026
48d7e5d
feat(state): atomic task registration with required owner
yoni-bagelman-thenvoi Jun 9, 2026
775e86a
Merge pull request #23 from yoni-bagelman-thenvoi/feat/task-registrat…
yoni-bagelman-thenvoi Jun 9, 2026
23d8847
feat(watchdog): owner-aware nudging, marker-after-send, active-only p…
yoni-bagelman-thenvoi Jun 9, 2026
e606c9b
Merge pull request #24 from yoni-bagelman-thenvoi/feat/watchdog-owner…
yoni-bagelman-thenvoi Jun 9, 2026
3e9c815
feat(command): /codeband seeds via cb register-task
yoni-bagelman-thenvoi Jun 9, 2026
d6dfbd1
Merge pull request #25 from yoni-bagelman-thenvoi/feat/codeband-comma…
yoni-bagelman-thenvoi Jun 9, 2026
f3770f2
fix(command): derive jam inbox team from session JSON
yoni-bagelman-thenvoi Jun 9, 2026
e963c4a
Merge pull request #26 from yoni-bagelman-thenvoi/fix/codeband-inbox-…
yoni-bagelman-thenvoi Jun 10, 2026
ebf6ad4
feat(state): verdict-list foundation — config, snapshot, fail-loud re…
yoni-bagelman-thenvoi Jun 10, 2026
37bba83
Merge pull request #27 from yoni-bagelman-thenvoi/feat/verdict-list-f…
yoni-bagelman-thenvoi Jun 10, 2026
2d07f14
feat(state): merge-edge FSM states + SHA-pinned eligibility gate
yoni-bagelman-thenvoi Jun 10, 2026
43e8083
Merge pull request #28 from yoni-bagelman-thenvoi/feat/merge-edge-fsm
yoni-bagelman-thenvoi Jun 10, 2026
0dbfd79
docs: add staleness banner to engineering brief
yoni-bagelman-thenvoi Jun 10, 2026
10bc4e2
Merge pull request #29 from yoni-bagelman-thenvoi/docs/engineering-brief
yoni-bagelman-thenvoi Jun 10, 2026
79ccf07
feat(cli): cb-phase merge — gated execution, approval routing, crash …
yoni-bagelman-thenvoi Jun 10, 2026
9204183
Merge pull request #30 from yoni-bagelman-thenvoi/feat/merge-leg-exec…
yoni-bagelman-thenvoi Jun 10, 2026
306a2e4
feat(cli): cb-phase verify re-enters from needs_rebase (rebase rework…
yoni-bagelman-thenvoi Jun 10, 2026
897b455
feat(state): surface needs_rebase in the Mergemaster rehydration view
yoni-bagelman-thenvoi Jun 10, 2026
51fb530
feat(prompts): gated merge routing, rebase flow, approval-grant doc
yoni-bagelman-thenvoi Jun 10, 2026
5acad42
Merge pull request #31 from yoni-bagelman-thenvoi/feat/stage2-prompt-…
yoni-bagelman-thenvoi Jun 10, 2026
512e950
fix(merge): integrity hardening — rebind guard, SHA-pinned execution,…
yoni-bagelman-thenvoi Jun 11, 2026
06966f0
Merge pull request #32 from yoni-bagelman-thenvoi/fix/merge-leg-integ…
yoni-bagelman-thenvoi Jun 11, 2026
9b33574
fix(handoff): pin verdicts to the PR head, fail loud on unresolvable SHA
yoni-bagelman-thenvoi Jun 11, 2026
35a0ed4
fix(state): re-registration restores tasks.status='active'
yoni-bagelman-thenvoi Jun 11, 2026
f2ba161
Merge pull request #33 from yoni-bagelman-thenvoi/fix/verdict-sha-fro…
yoni-bagelman-thenvoi Jun 11, 2026
8785e1a
Merge pull request #34 from yoni-bagelman-thenvoi/fix/reregister-rest…
yoni-bagelman-thenvoi Jun 11, 2026
b6da2bc
fix(cli): cwd-independent project-dir resolution for cb-phase and cb …
yoni-bagelman-thenvoi Jun 11, 2026
c3e5367
fix(state): move the active-room pointer next to the DB it pairs with
yoni-bagelman-thenvoi Jun 11, 2026
d9c6eae
fix(gates): one-snapshot verify, loud cb-approve failures, cwd-indepe…
yoni-bagelman-thenvoi Jun 11, 2026
ede26ee
Merge pull request #35 from yoni-bagelman-thenvoi/fix/project-dir-res…
yoni-bagelman-thenvoi Jun 11, 2026
2d6b53a
Merge pull request #37 from yoni-bagelman-thenvoi/fix/gate-context-ha…
yoni-bagelman-thenvoi Jun 11, 2026
db8e4e5
Merge pull request #38 from yoni-bagelman-thenvoi/fix/pointer-next-to-db
yoni-bagelman-thenvoi Jun 11, 2026
0ad7563
fix(deps): cap band-sdk <0.3, declare thenvoi-client-rest, fail loud …
yoni-bagelman-thenvoi Jun 11, 2026
9068f8c
fix(context): doctor dual-pointer read, cb-phase WORKSPACE parity, re…
yoni-bagelman-thenvoi Jun 11, 2026
2d7b093
Merge pull request #39 from yoni-bagelman-thenvoi/fix/band-sdk-pin-cap
yoni-bagelman-thenvoi Jun 11, 2026
12ba9f0
Merge pull request #40 from yoni-bagelman-thenvoi/fix/context-resolut…
yoni-bagelman-thenvoi Jun 11, 2026
d1a5082
fix(config): validate caps/intervals, role keys; document env vars; d…
yoni-bagelman-thenvoi Jun 11, 2026
aff4749
Merge pull request #41 from yoni-bagelman-thenvoi/fix/config-validation
yoni-bagelman-thenvoi Jun 11, 2026
0a2c7e3
fix(state): bound the rebase loop, widen patrol coverage, fix stall-c…
yoni-bagelman-thenvoi Jun 11, 2026
2b6d236
Merge pull request #42 from yoni-bagelman-thenvoi/fix/loop-coverage
yoni-bagelman-thenvoi Jun 11, 2026
366c2ef
fix(monitoring): patrol cost, log robustness, best-effort bookkeeping…
yoni-bagelman-thenvoi Jun 11, 2026
be06981
Merge pull request #43 from yoni-bagelman-thenvoi/fix/monitoring-robu…
yoni-bagelman-thenvoi Jun 11, 2026
f79c3bd
fix(watchdog): page the free-tier recency probe to the since-window
yoni-bagelman-thenvoi Jun 11, 2026
2a2ace0
Merge pull request #44 from yoni-bagelman-thenvoi/fix/watchdog-probe-…
yoni-bagelman-thenvoi Jun 11, 2026
03a9f8c
feat(runner): local reconnect v1 — subscribe-by-default with store-sc…
yoni-bagelman-thenvoi Jun 11, 2026
5c7b2b0
Merge pull request #45 from yoni-bagelman-thenvoi/feat/local-reconnec…
yoni-bagelman-thenvoi Jun 11, 2026
076ca98
fix(approve): grant only the requested SHA, scope to requesting rows,…
yoni-bagelman-thenvoi Jun 12, 2026
3fdb76e
feat(recovery): cb-phase abandon/resume primitives + SHA-shaped needs…
yoni-bagelman-thenvoi Jun 12, 2026
2f894d0
fix(mechanicals): @[[uuid]] mention parsing, supersede scoped to acti…
yoni-bagelman-thenvoi Jun 12, 2026
e826929
fix(codex): coding-scale turn budget, message-retry budget, dead-clie…
yoni-bagelman-thenvoi Jun 12, 2026
8d3ff2e
Merge pull request #46 from yoni-bagelman-thenvoi/fix/approve-contract
yoni-bagelman-thenvoi Jun 12, 2026
f839da0
Merge pull request #47 from yoni-bagelman-thenvoi/feat/recovery-primi…
yoni-bagelman-thenvoi Jun 12, 2026
8d4d37a
Merge pull request #48 from yoni-bagelman-thenvoi/fix/campaign-mechan…
yoni-bagelman-thenvoi Jun 12, 2026
9cf0026
docs(codex): pin that turn_timeout_s=0 is instant abandon on 0.2.11, …
yoni-bagelman-thenvoi Jun 12, 2026
330eef5
Merge pull request #49 from yoni-bagelman-thenvoi/fix/codex-turn-miti…
yoni-bagelman-thenvoi Jun 12, 2026
93ce9e3
feat(integrity): hash-chain transition_log + audit_log, cb verify-log…
yoni-bagelman-thenvoi Jun 13, 2026
3f7e82b
feat(attribution): CLI invocation logging + CODEBAND_ROLE markers + c…
yoni-bagelman-thenvoi Jun 13, 2026
976a42a
feat(governance): reconcile requires a grant + scope rule + conductor…
yoni-bagelman-thenvoi Jun 13, 2026
fdc8657
fix(evidence): include head_sha in transition_log hash chain
yoni-bagelman-thenvoi Jun 13, 2026
5b7265e
Merge pull request #50 from yoni-bagelman-thenvoi/feat/evidence-integ…
yoni-bagelman-thenvoi Jun 13, 2026
e4b7ab4
Merge pull request #51 from yoni-bagelman-thenvoi/feat/attribution-ro…
yoni-bagelman-thenvoi Jun 13, 2026
185e424
Merge pull request #52 from yoni-bagelman-thenvoi/feat/peer-governanc…
yoni-bagelman-thenvoi Jun 13, 2026
c8119dc
fix(watchdog): route stall-blocked alert to assigned_worker or owner …
yoni-bagelman-thenvoi Jun 13, 2026
9e90e88
fix(watchdog): re-detect head moved while merge_pending, route to nee…
yoni-bagelman-thenvoi Jun 13, 2026
6e3635d
Merge pull request #53 from yoni-bagelman-thenvoi/fix/watchdog-robust…
yoni-bagelman-thenvoi Jun 13, 2026
ec919ee
fix(watchdog): clear _owner_escalated marker when subtask leaves bloc…
yoni-bagelman-thenvoi Jun 13, 2026
2215b72
fix(conductor): add grant SHA-pinned rule under verify-claims (findin…
yoni-bagelman-thenvoi Jun 13, 2026
569a447
docs(claude): correct codex auth description — subscription-first, no…
yoni-bagelman-thenvoi Jun 13, 2026
20c341e
Merge pull request #54 from yoni-bagelman-thenvoi/fix/escalation-resu…
yoni-bagelman-thenvoi Jun 13, 2026
6f837b1
Merge pull request #55 from yoni-bagelman-thenvoi/fix/conductor-grant…
yoni-bagelman-thenvoi Jun 13, 2026
dcac410
Merge pull request #56 from yoni-bagelman-thenvoi/docs/codex-auth-cor…
yoni-bagelman-thenvoi Jun 13, 2026
755ea32
feat(verifier): add Verifier seat scaffolding — INERT by default (PR1)
yoni-bagelman-thenvoi Jun 13, 2026
9f45cc5
Merge pull request #57 from yoni-bagelman-thenvoi/feat/verifier-seat-…
yoni-bagelman-thenvoi Jun 13, 2026
1489719
feat(verifier): activate the acceptance gate — verify_acceptance is a…
yoni-bagelman-thenvoi Jun 13, 2026
49f8ddd
feat(watchdog): add deep full-history integrity sweep rung (verifier)
yoni-bagelman-thenvoi Jun 13, 2026
e462714
Merge pull request #59 from yoni-bagelman-thenvoi/feat/verifier-full-…
yoni-bagelman-thenvoi Jun 13, 2026
6e15cc7
fix(verifier): keep the acceptance seat INERT by default — defer acti…
yoni-bagelman-thenvoi Jun 13, 2026
e7c08f8
Merge pull request #58 from yoni-bagelman-thenvoi/feat/verifier-accep…
yoni-bagelman-thenvoi Jun 13, 2026
2c445ca
feat(verifier): wire the Verifier runtime + dispatch and activate the…
yoni-bagelman-thenvoi Jun 13, 2026
a7f7e6a
Merge pull request #60 from yoni-bagelman-thenvoi/feat/verifier-runti…
yoni-bagelman-thenvoi Jun 13, 2026
8624174
fix(cli): detect Codex subscription auth case-insensitively via JSON …
yoni-bagelman-thenvoi Jun 13, 2026
e9570e1
Merge pull request #61 from yoni-bagelman-thenvoi/fix/codex-subscript…
yoni-bagelman-thenvoi Jun 13, 2026
fb35d91
feat(cli): add cb room-log command for offline transcript dumps
yoni-bagelman-thenvoi Jun 13, 2026
ce55e65
Merge pull request #62 from yoni-bagelman-thenvoi/feat/cb-room-log
yoni-bagelman-thenvoi Jun 13, 2026
efc1ce5
feat(verifier): expand mandate to contract conformance + evidence int…
yoni-bagelman-thenvoi Jun 13, 2026
48723ed
Merge pull request #63 from yoni-bagelman-thenvoi/feat/verifier-contr…
yoni-bagelman-thenvoi Jun 13, 2026
bbb7c23
feat(handoff): add claim-time subtask-id format guard
yoni-bagelman-thenvoi Jun 14, 2026
b2dcf87
fix(handoff): use re.fullmatch for subtask-id guard — closes \n bypass
yoni-bagelman-thenvoi Jun 14, 2026
3113a48
fix(handoff): restrict guard to ASCII digits — closes \d Unicode bypass
yoni-bagelman-thenvoi Jun 14, 2026
1122810
Merge pull request #64 from yoni-bagelman-thenvoi/codeband/coder-clau…
yoni-bagelman-thenvoi Jun 14, 2026
485259c
chore(security): write agent_config.yaml 0600 and gitignore it; bound…
yoni-bagelman-thenvoi Jun 14, 2026
8bec97a
fix(memory): degrade on local_store write OSError instead of crash-lo…
yoni-bagelman-thenvoi Jun 14, 2026
6e8214e
test(conftest): hermetic test env — block host .env leakage
yoni-bagelman-thenvoi Jun 14, 2026
927f8b6
fix(cli): register-task honors \$WORKSPACE via resolve_workspace_path
yoni-bagelman-thenvoi Jun 14, 2026
b52f3c0
fix(cli): clean Error: on bad --since and gh failures — no raw traceb…
yoni-bagelman-thenvoi Jun 14, 2026
9964de1
Merge pull request #66 from yoni-bagelman-thenvoi/fix/local-store-har…
yoni-bagelman-thenvoi Jun 14, 2026
700faa9
Merge pull request #65 from yoni-bagelman-thenvoi/chore/secrets-perms…
yoni-bagelman-thenvoi Jun 14, 2026
820407b
Merge pull request #67 from yoni-bagelman-thenvoi/fix/cli-hardening-t…
yoni-bagelman-thenvoi Jun 14, 2026
8a161aa
fix(merge): surface ungated-external-merge audit failure at WARNING
yoni-bagelman-thenvoi Jun 14, 2026
92c3379
fix(docker): add verifier services and explicit BAND_API_KEY env
yoni-bagelman-thenvoi Jun 14, 2026
6cdfb51
chore: remove dead fetch_latest
yoni-bagelman-thenvoi Jun 14, 2026
ae9b88a
docs(config): state verifier dual mandate in VerifiersConfig
yoni-bagelman-thenvoi Jun 14, 2026
61e6a72
fix(config): raise default max_review_rounds 3->6
yoni-bagelman-thenvoi Jun 14, 2026
a343326
fix(state): scope list_active_subtasks in watchdog patrol (T-06)
yoni-bagelman-thenvoi Jun 14, 2026
1c1b55e
Merge pull request #68 from yoni-bagelman-thenvoi/fix/merge-audit-log…
yoni-bagelman-thenvoi Jun 14, 2026
6bd5ee0
Merge pull request #69 from yoni-bagelman-thenvoi/fix/docker-verifier…
yoni-bagelman-thenvoi Jun 14, 2026
f6628ad
Merge pull request #70 from yoni-bagelman-thenvoi/chore/remove-dead-code
yoni-bagelman-thenvoi Jun 14, 2026
cac6ac3
Merge pull request #71 from yoni-bagelman-thenvoi/fix/config-defaults…
yoni-bagelman-thenvoi Jun 14, 2026
86c729d
Merge pull request #72 from yoni-bagelman-thenvoi/fix/subtask-query-s…
yoni-bagelman-thenvoi Jun 14, 2026
aecd280
docs(prompts): one PR equals one subtask in planner guidance
yoni-bagelman-thenvoi Jun 14, 2026
d850b36
docs(prompts): state verifier dual mandate in conductor prompt
yoni-bagelman-thenvoi Jun 14, 2026
c7987e2
docs(architecture): add state/cli/shell/monitoring layers and Verifie…
yoni-bagelman-thenvoi Jun 14, 2026
0e5c386
Merge pull request #73 from yoni-bagelman-thenvoi/docs/planner-one-su…
yoni-bagelman-thenvoi Jun 14, 2026
ce241d2
Merge pull request #74 from yoni-bagelman-thenvoi/docs/conductor-dual…
yoni-bagelman-thenvoi Jun 14, 2026
7f1c84b
Merge pull request #75 from yoni-bagelman-thenvoi/docs/architecture-r…
yoni-bagelman-thenvoi Jun 14, 2026
4df9676
feat(auth): add CODEBAND_CLAUDE_PREFER_API_KEY override for subscript…
yoni-bagelman-thenvoi Jun 14, 2026
d89d510
docs: retire greenroom label in engineering-brief
yoni-bagelman-thenvoi Jun 14, 2026
b4765a8
feat(handoff): resolve verify command from target repo, fail-loud whe…
yoni-bagelman-thenvoi Jun 14, 2026
d7c1bfc
Merge pull request #76 from yoni-bagelman-thenvoi/feat/claude-prefer-…
yoni-bagelman-thenvoi Jun 14, 2026
8bb1166
Merge pull request #77 from yoni-bagelman-thenvoi/docs/retire-greenro…
yoni-bagelman-thenvoi Jun 14, 2026
9e57a75
Merge pull request #78 from yoni-bagelman-thenvoi/feat/per-repo-verif…
yoni-bagelman-thenvoi Jun 14, 2026
a970c93
fix(verify): infra exit codes bypass verify-attempt budget
yoni-bagelman-thenvoi Jun 14, 2026
8444990
Merge pull request #79 from yoni-bagelman-thenvoi/fix/verify-infra-no…
yoni-bagelman-thenvoi Jun 14, 2026
3b1de86
fix(watchdog): surface unexpected watchdog task death
yoni-bagelman-thenvoi Jun 14, 2026
272e572
Merge pull request #80 from yoni-bagelman-thenvoi/fix/watchdog-done-c…
yoni-bagelman-thenvoi Jun 14, 2026
6ef0114
feat(cb-phase): classify refused transitions as no-op/stale/illegal
yoni-bagelman-thenvoi Jun 15, 2026
6a817e0
Merge pull request #81 from yoni-bagelman-thenvoi/feat/idempotent-noop
yoni-bagelman-thenvoi Jun 15, 2026
c76c1c3
docs(prompts): mentions-are-not-tasks + conductor no-police-chatter
yoni-bagelman-thenvoi Jun 15, 2026
3324836
Merge pull request #82 from yoni-bagelman-thenvoi/feat/mention-not-task
yoni-bagelman-thenvoi Jun 15, 2026
029c269
refactor(cb-phase): record-based no-op; drop STALE classification
yoni-bagelman-thenvoi Jun 15, 2026
4ab1a0c
Merge pull request #83 from yoni-bagelman-thenvoi/refactor/record-bas…
yoni-bagelman-thenvoi Jun 15, 2026
1a84fd8
feat(watchdog): detect and heal turn-boundary 422 pins
yoni-bagelman-thenvoi Jun 15, 2026
8c24d8b
Merge pull request #84 from yoni-bagelman-thenvoi/feat/watchdog-heal-pin
yoni-bagelman-thenvoi Jun 15, 2026
20dbc83
fix(watchdog): detect and 2-step heal pending head-of-queue transport…
yoni-bagelman-thenvoi Jun 15, 2026
2df2e26
Merge pull request #85 from yoni-bagelman-thenvoi/fix/transport-heal-…
yoni-bagelman-thenvoi Jun 15, 2026
5608cc0
feat(watchdog): defer stall->blocked when the expected actor is trans…
yoni-bagelman-thenvoi Jun 15, 2026
6fa680c
Merge pull request #86 from yoni-bagelman-thenvoi/feat/stall-transpor…
yoni-bagelman-thenvoi Jun 15, 2026
2b28066
fix(approval): single CLI-grant instruction at merge_pending; stop ch…
yoni-bagelman-thenvoi Jun 15, 2026
3ea2dc6
Merge pull request #87 from yoni-bagelman-thenvoi/fix/approval-cli-gr…
yoni-bagelman-thenvoi Jun 15, 2026
5bdef13
chore(deps): regenerate uv.lock to match pyproject
yoni-bagelman-thenvoi Jun 15, 2026
2768bf1
test(recovery): guard #85/#86 pin-detection criteria agreement
yoni-bagelman-thenvoi Jun 15, 2026
11af338
Merge pull request #88 from yoni-bagelman-thenvoi/chore/regenerate-uv…
yoni-bagelman-thenvoi Jun 15, 2026
8902670
Merge pull request #89 from yoni-bagelman-thenvoi/test/pin-detection-…
yoni-bagelman-thenvoi Jun 15, 2026
9888966
fix(merge): classify terminal duplicate merge as no-op
yoni-bagelman-thenvoi Jun 15, 2026
595b5c2
Merge pull request #90 from yoni-bagelman-thenvoi/fix/noop-merge-leg
yoni-bagelman-thenvoi Jun 15, 2026
6b46b17
fix(reconnect): add full jitter to backoff to break thundering herd
yoni-bagelman-thenvoi Jun 15, 2026
8f55b59
Merge pull request #91 from yoni-bagelman-thenvoi/fix/next-retry-backoff
yoni-bagelman-thenvoi Jun 15, 2026
fca4628
feat(kickoff): post room messages under session agent identity when C…
yoni-bagelman-thenvoi Jun 15, 2026
f4c51fe
Merge pull request #92 from yoni-bagelman-thenvoi/feat/session-agent-…
yoni-bagelman-thenvoi Jun 15, 2026
79f9f73
fix(merge): converge already-applied needs_rebase transition as no-op
yoni-bagelman-thenvoi Jun 15, 2026
de354be
Merge pull request #93 from yoni-bagelman-thenvoi/fix/needs-rebase-noop
yoni-bagelman-thenvoi Jun 15, 2026
c291ddb
feat(session-agent): register/enroll, orchestrator heartbeat, stale-s…
yoni-bagelman-thenvoi Jun 15, 2026
44e8dab
Merge pull request #94 from yoni-bagelman-thenvoi/feat/session-agent-…
yoni-bagelman-thenvoi Jun 15, 2026
f2028cc
chore(skill): reconcile docs/commands/codeband.md to deployed truth
yoni-bagelman-thenvoi Jun 15, 2026
9223ad7
Merge pull request #95 from yoni-bagelman-thenvoi/chore/reconcile-ski…
yoni-bagelman-thenvoi Jun 15, 2026
020348d
feat(watchdog): approval→merge durable-state backstop rung
yoni-bagelman-thenvoi Jun 15, 2026
56177f7
feat(observability): df#5 recovery markers
yoni-bagelman-thenvoi Jun 15, 2026
77117e2
fix(observability): anchor AGENT_RECONNECTED to first success
yoni-bagelman-thenvoi Jun 15, 2026
65a85d6
Merge pull request #97 from yoni-bagelman-thenvoi/feat/df5-recovery-o…
yoni-bagelman-thenvoi Jun 15, 2026
02b92f0
Merge pull request #96 from yoni-bagelman-thenvoi/feat/approval-merge…
yoni-bagelman-thenvoi Jun 15, 2026
6af2b04
fix(setup): surface CREDENTIAL_MISMATCH delete failures instead of sw…
yoni-bagelman-thenvoi Jun 16, 2026
42040de
style: apply ruff format to changed files
yoni-bagelman-thenvoi Jun 16, 2026
f5f5163
Merge pull request #98 from yoni-bagelman-thenvoi/fix/register-422-sw…
yoni-bagelman-thenvoi Jun 16, 2026
dfeba66
chore(config): bump default Codex model from gpt-5.4 to gpt-5.5
yoni-bagelman-thenvoi Jun 16, 2026
0e36d64
Merge pull request #99 from yoni-bagelman-thenvoi/fix/register-422-sw…
yoni-bagelman-thenvoi Jun 16, 2026
ed7908c
feat(watchdog): acceptance_passed auto-advance rung
yoni-bagelman-thenvoi Jun 16, 2026
dfb9704
Merge pull request #100 from yoni-bagelman-thenvoi/fix/auto-advance-a…
yoni-bagelman-thenvoi Jun 17, 2026
9f2ec7f
feat(identity): durable subtask identity (worker + reviewer) keyed on…
yoni-bagelman-thenvoi Jun 17, 2026
fd62825
Merge pull request #101 from yoni-bagelman-thenvoi/feat/subtask-identity
yoni-bagelman-thenvoi Jun 17, 2026
695bcfe
fix(watchdog): transport-heal now covers the Conductor's own pinned c…
yoni-bagelman-thenvoi Jun 17, 2026
e01464f
Merge pull request #102 from yoni-bagelman-thenvoi/fix/conductor-pin-…
yoni-bagelman-thenvoi Jun 17, 2026
b2f0e17
feat(observability): MSG_ATTEMPT_WINDOW marker for the message-ack wi…
yoni-bagelman-thenvoi Jun 17, 2026
d67ae78
fix(observability): emit MSG_ATTEMPT_WINDOW only on a normal ack return
yoni-bagelman-thenvoi Jun 17, 2026
888a372
Merge pull request #103 from yoni-bagelman-thenvoi/feat/attempt-windo…
yoni-bagelman-thenvoi Jun 17, 2026
072dac7
feat(transport): opt-in jam delivery behind CODEBAND_DELIVERY (defaul…
yoni-bagelman-thenvoi Jun 17, 2026
e591dbe
fix(transport): durable per-agent processed-message dedupe for jam pa…
yoni-bagelman-thenvoi Jun 17, 2026
15b0312
fix(conductor): retain codex scratch dir for adapter lifetime (#106)
yoni-bagelman-thenvoi Jun 17, 2026
b899a3b
fix(doctor): verify configured agents exist on Band (#107)
yoni-bagelman-thenvoi Jun 17, 2026
935d629
chore: gitignore AGENTS.md (Codex guidance doc, local-only)
yoni-bagelman-thenvoi Jun 17, 2026
6a3ca3c
fix(reset): clear stale state rooms on workspace wipe (#108)
yoni-bagelman-thenvoi Jun 17, 2026
081920e
Merge branch 'main' of https://github.com/yoni-bagelman-thenvoi/codeband
yoni-bagelman-thenvoi Jun 17, 2026
ff87c24
docs: refresh codeband skill delivery prose (#109)
yoni-bagelman-thenvoi Jun 18, 2026
9c7c6ab
fix: limit planner prompt sends per trigger (#110)
yoni-bagelman-thenvoi Jun 18, 2026
f0b93e6
fix: add codex api-key auth override (#111)
yoni-bagelman-thenvoi Jun 18, 2026
f7b1ed0
fix: make fresh-init verify opt-in
yoni-bagelman-thenvoi Jun 18, 2026
2538b4c
Merge pull request #112 from yoni-bagelman-thenvoi/fix/fresh-init-ver…
yoni-bagelman-thenvoi Jun 18, 2026
6a915e5
fix: recognize verifier agents during setup cleanup
yoni-bagelman-thenvoi Jun 18, 2026
e4f91f1
Merge pull request #113 from yoni-bagelman-thenvoi/fix/verifier-prefi…
yoni-bagelman-thenvoi Jun 18, 2026
2e471d0
docs: align orchestration drift notes
yoni-bagelman-thenvoi Jun 18, 2026
b24ee70
Merge pull request #114 from yoni-bagelman-thenvoi/docs/drift-sweep-p…
yoni-bagelman-thenvoi Jun 18, 2026
461f3fd
fix(security): close three pre-PR adversarial findings
yoni-bagelman-thenvoi Jun 18, 2026
f23996c
chore: fix ruff lint in tests (unused imports / locals)
yoni-bagelman-thenvoi Jun 18, 2026
943a9f6
Merge pull request #115 from yoni-bagelman-thenvoi/fix/security-adver…
yoni-bagelman-thenvoi Jun 18, 2026
8fbba3e
fix(approval): close F13 ghost-approval, F14 wrong-author, B2 peer se…
yoni-bagelman-thenvoi Jun 18, 2026
9d30f81
fix(test): remove bare f-string in test_merge_leg mock (ruff F541)
yoni-bagelman-thenvoi Jun 18, 2026
3a87f89
Merge pull request #116 from yoni-bagelman-thenvoi/fix/approval-attri…
yoni-bagelman-thenvoi Jun 18, 2026
ec30e83
feat(coordinator): wire codeband-session-* identity into cb run
yoni-bagelman-thenvoi Jun 18, 2026
07c22e4
style: ruff format test_run_provisioning.py (fmt gate)
yoni-bagelman-thenvoi Jun 18, 2026
6d89a6d
Merge pull request #117 from yoni-bagelman-thenvoi/feat/coordinator-s…
yoni-bagelman-thenvoi Jun 18, 2026
80bc21c
fix(setup-agents): skip destructive delete for description-only drift
yoni-bagelman-thenvoi Jun 18, 2026
1382e88
fix(conductor): enforce room-participant fallback before declaring ro…
yoni-bagelman-thenvoi Jun 18, 2026
f8429ba
Merge pull request #118 from yoni-bagelman-thenvoi/fix/setup-agents-n…
yoni-bagelman-thenvoi Jun 18, 2026
f47594d
Merge pull request #119 from yoni-bagelman-thenvoi/fix/conductor-peer…
yoni-bagelman-thenvoi Jun 18, 2026
b9ae3fd
fix(watchdog,session): wipe stale task state on re-run; guard watchdo…
yoni-bagelman-thenvoi Jun 18, 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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,7 @@ __marimo__/

# Streamlit
.streamlit/secrets.toml

# Codeband — agent credentials (contains API keys)
agent_config.yaml
AGENTS.md
146 changes: 134 additions & 12 deletions ARCHITECTURE.md

Large diffs are not rendered by default.

37 changes: 35 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ All LLM calls — including the `cb prs --smart` / `cb issues --smart` CLI helpe
### Auth policy (asymmetric by design)

- **Claude is subscription-first.** `cli.py:_resolve_claude_auth` strips `ANTHROPIC_API_KEY` at startup whenever any OAuth source exists: `CLAUDE_CODE_OAUTH_TOKEN`, macOS Keychain (`security -s "Claude Code-credentials"`), or `$CLAUDE_CONFIG_DIR/.credentials.json` (default `~/.claude/.credentials.json`). This is because the Claude CLI's own precedence puts API key *above* OAuth — without intervention, a user with `claude` logged in locally would silently pay per token.
- **Codex is API-key-first.** When both `OPENAI_API_KEY` and a `~/.codex/auth.json` ChatGPT session exist, the API key wins (per OpenAI's own automation guidance and `docker/entrypoint.sh`). Parallel Codex workers exhaust subscription quotas quickly.
- **Codex is subscription-first** (mirrors Claude). `cli.py:_resolve_codex_auth` strips `OPENAI_API_KEY` at startup when `~/.codex/auth.json` carries a valid ChatGPT subscription credential — the API key is stashed as `CODEBAND_FALLBACK_OPENAI_API_KEY` so preflight can restore it only if the subscription path reports usage-limit exhaustion. Parallel Codex workers exhaust subscription quotas quickly, so the intent is the same as Claude: avoid silently burning API credits while a subscription is active.
- **Preflight in `cb run`** (`preflight.py`) makes one tiny call through each CLI before spawning agents. It pattern-matches known error text ("Credit balance is too low", "usage limit reached", "rate_limit_error", "please log in", etc.) and fails fast with a remediation hint. Without this, auth/billing errors surface as plain assistant text posted into chat rooms — the watchdog stays happy and the whole swarm idles silently. `--skip-preflight` bypasses for CI/offline. The Codex preflight only runs when the config has at least one Codex agent.
- **Doctor** (`doctor.check_claude_auth`) warns when `ANTHROPIC_API_KEY` is set alongside host subscription OAuth — Codeband auto-prefers at run-time, but the WARN flags the suboptimal `.env` for cleanup.

### Worker pool architecture

Coders, Code Reviewers, Planners, and Plan Reviewers are **pool roles** — each is declared in `codeband.yaml` as `{framework: {count, model}}` under `agents.{coders, reviewers, planners, plan_reviewers}`. Conductor and Mergemaster are **singletons**. Pool member identities follow `{role}-{framework}-{index}` (e.g., `coder-claude_sdk-0`); Band.ai display names are title-cased (`Coder-Claude-0`). The default `cb init` config is 8 agents total — fits Band.ai's free-tier 10-agent cap.
Coders, Code Reviewers, Planners, Plan Reviewers, and Verifiers are **pool roles** — each is declared in `codeband.yaml` as `{framework: {count, model}}` under `agents.{coders, reviewers, planners, plan_reviewers, verifiers}`. Conductor and Mergemaster are **singletons**. Pool member identities follow `{role}-{framework}-{index}` (e.g., `coder-claude_sdk-0`); Band.ai display names are title-cased (`Coder-Claude-0`). The default `cb init` config is 10 agents total — the 8 coordination/coder/reviewer seats plus one Verifier per vendor — exactly Band.ai's free-tier 10-agent cap. The Verifier is the evidence-integrity acceptance gate that runs after code review and before merge: its `verify_acceptance` verdict is a SHA-pinned merge requirement whenever a verifier is configured. Fresh installs default to `required_verdicts: ["review"]` plus `verify_acceptance` when verifiers are configured; the local `verify` verdict is opt-in via `agents.handoff_verify_command`. Setting `agents.verifiers` to count 0 per vendor opts back out, dropping to 8 agents and merging straight from review.

The `codeband/workers/pool.py:WorkerPool` is a thread-safe in-memory allocator with `acquire(role, framework)`, `release(worker_id)`, and `pair_for_task(coder_role, coder_framework)` which atomically reserves a coder and an opposite-framework reviewer (adversarial cross-model review is the primary value prop — a Claude coder's PR routes to a Codex reviewer, and vice versa). The allocator is defined but not yet wired into the Conductor's LLM prompt — allocation is currently prompt-enforced via `runner._build_worker_roster()` which surfaces the pool to the Conductor. Code-backed allocation is on the roadmap.

Expand All @@ -44,6 +44,8 @@ The `codeband/workers/pool.py:WorkerPool` is a thread-safe in-memory allocator w

Every agent runs under a reconnect-forever loop: both crashes and clean exits from `agent.run()` trigger another cycle. Unsupervised roles (Conductor, Mergemaster, Planner, Plan Reviewer, Code Reviewer) use the module-level `_run_agent_forever` in `orchestration/runner.py` with exponential backoff capped at 60s. Coders additionally run under `WorkerSupervisor` (`session/supervisor.py`), which rebuilds recovery context from git log + uncommitted changes + `TASK.md` on each restart; identity is persisted as JSON in `workspace/state/<worker-id>.json` (`session/identity.py:WorkerIdentity`). Only SIGINT/SIGTERM ends the process. `PoolEntry.restart_delay_seconds` in `config.py` controls the base supervisor delay; `PoolEntry.max_restarts` is deprecated and no longer honored.

**Reconnect ownership.** Local mode: the outer reconnect loop is the *sole* lifecycle owner — `_patch_band_local_runtime()` disables the SDK's PHX auto-reconnect, so socket death is detected by the websockets keepalive (~40s), which exits the routing task and triggers a fresh cycle; the SDK's idle resync (`agents.idle_resync_seconds`, default 30) is the delivery backstop for missed pushes — with a known upstream defect: the backstop self-disables per room once any one message exhausts its retry budget (client-side permafail pins the head of the `/next` queue); `agents.max_message_retries` (default 3, vs the SDK's 1) reduces how often that fires but does not eliminate it; on each (re)start agents subscribe to existing rooms scoped to active tasks in the StateStore (`cb run --fresh` opts out; a store failure subscribes everything — fail toward connectivity). Teardown between cycles (`_safe_stop_agent`, supervisor `_close_agent`) fails loud at ERROR and verifies the websocket actually closed. Distributed mode (`run_agent`) is intentionally unpatched: SDK-native reconnect and subscribe-existing.

### Communication: three-channel model

The system uses three channels: **chat** (Band.ai @mentions) for content delivery and coordination, **memory** (Band.ai memory API) for protocol state tracking, and **GitHub PR comments** for code review artifacts. Memory has a 1000-char content limit — full plans, reviews, and logs flow through chat and GitHub, while memory stores lightweight state envelopes.
Expand Down Expand Up @@ -87,3 +89,34 @@ Agent system prompts live in `src/codeband/prompts/*.md` and are loaded directly
- `from __future__ import annotations` in every file
- Band.ai SDK imports are deferred (inside functions) to keep import time fast and avoid hard dependency when only config/workspace code is used
- Tests use `tmp_path` fixtures for filesystem isolation; git integration tests create real repos with `subprocess`

---

## Determinism fleet (fork-local coordination)

> This section coordinates the multi-session build of the determinism RFC in this **fork**. It is not part of upstream codeband — exclude it when upstreaming phase branches.

We are implementing [`docs/rfc-deterministic-orchestration.md`](docs/rfc-deterministic-orchestration.md) as **one independent Claude Code session per phase**, each in its own git worktree, each landing **one PR**. Before writing code, read your phase's RFC workstream in full.

**Guiding principle:** the LLM decides, code enforces and remembers — the FSM gates EFFECTS (transitions/merges), not the Conductor's creative routing.

| Phase / worktree | RFC workstream | Owns (new files) | May edit | Depends on |
|---|---|---|---|---|
| `phase-1-state-store` | WS1 | `state/__init__.py`, `state/store.py`, `tests/test_state_store.py` | `orchestration/runner.py` (`_install_memory_backend`), `orchestration/kickoff.py` (`send_task`) | — (**blocks all**) |
| `phase-2-fsm-gates` | WS2+WS3 | `state/fsm.py`, `cli/__init__.py` (move from `cli.py`), `cli/handoff.py`, `tests/test_fsm.py`, `tests/test_handoff.py` | `pyproject.toml`, `config.py` (`AgentsConfig`) | Phase 1 |
| `phase-3-watchdog` | WS4 | `tests/test_watchdog_upgrade.py` | `agents/watchdog.py`, `config.py` (`WatchdogConfig`), maybe `orchestration/runner.py` | Phase 1 |
| `phase-4-rehydration` | WS5 | `state/rehydration.py`, `tests/test_rehydration.py` | `orchestration/runner.py` (5 factories + `_run_agent_forever`), `agents/{conductor,planner,plan_reviewer,code_reviewer,mergemaster}.py`, `orchestration/agent_main.py` | Phase 1 |

**Merge order:** Phase 1 first (everything imports `state.store`). Then Phase 2 ∥ Phase 3. Phase 4 last (heaviest `runner.py` edits). Overlap to rebase around: `config.py` (P2 vs P3, different classes) and `runner.py` (P1/P3/P4).

**Rules for every session:**
- Stay in your lane — implement exactly your phase; do not touch other phases' files. If you need to, STOP and report.
- Branch + PR always; never commit to `main`; Conventional Commits.
- Run the suite before push; add **no new failures**. Self-review (`git diff main...HEAD`) — scope must match the phase only.

**Dev env (per worktree — `.venv` is not shared):**
```
uv venv && uv pip install -e ".[dev]"
.venv/bin/python -m pytest -q
```
**Baseline on `main`: the full suite passes** (the 3 `CliRunner` failures previously listed here have been fixed). Acceptance for any phase = the suite stays fully green and your new tests pass.
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ It is built for headless operation: local terminals, Linux servers, CI, Docker,
## Why Codeband?

- **Cross-model review by default**: Claude-written PRs are routed to Codex reviewers, and Codex-written PRs are routed to Claude reviewers.
- **A real orchestration loop**: planner, plan reviewer, coders, code reviewers, mergemaster, and watchdog coordinate through Band.ai.
- **A real orchestration loop**: planner, plan reviewer, coders, code reviewers, verifiers, mergemaster, and watchdog coordinate through Band.ai.
- **Safe workspace isolation**: each coder works in a separate git worktree and opens a PR.
- **Risk-aware merging**: low-risk PRs can auto-merge; medium, high, and critical changes wait for approval.
- **Human-friendly and headless**: use the interactive shell locally, or run the same orchestrator in CI and Docker.
Expand All @@ -29,7 +29,7 @@ Codeband's main advantage is not raw parallelism; it is adversarial pairing. A t

Parallel coders are useful when the Planner can split a task into independent subtasks with little file overlap. Each coder gets its own git worktree and branch, so separate subtasks can run at the same time without sharing a working directory. Parallel planners and plan reviewers are useful mostly for throughput across multiple queued tasks; for one task, a single Planner plus one opposite-framework Plan Reviewer is usually enough.

The default configuration is the recommended shape: one Claude Coder, one Codex Coder, one Reviewer from each framework, one Planner, and one opposite-framework Plan Reviewer. You can scale pools with `/scale` in the shell or `cb scale`, then run `cb setup-agents` so Band.ai has matching agents.
The default configuration is the recommended shape: one Claude Coder, one Codex Coder, one Reviewer from each framework, one Planner, one opposite-framework Plan Reviewer, and one Verifier from each framework. You can scale pools with `/scale` in the shell or `cb scale`, then run `cb setup-agents` so Band.ai has matching agents.

For collision-free parallel review, keep opposite-framework reviewer capacity at least as large as coder capacity: Claude coders need Codex reviewers, and Codex coders need Claude reviewers. Today first-dispatch reviewer selection is prompt-enforced from the Worker Pool Roster using deterministic worker-index pairing; full code-backed arbitration is on the roadmap.

Expand Down Expand Up @@ -138,7 +138,7 @@ Inside the shell:

Slash commands take the rest of the line as their argument, so `/task Add JWT authentication with tests` does not need quotes. In a normal terminal command, quote multi-word descriptions: `cb task "Add JWT authentication with tests"`.

On free-tier Band.ai, `cb setup-agents` may not be available. Create the eight default agents manually and write `agent_config.yaml`; the exact keys are documented in [Configuration](docs/CONFIGURATION.md).
On free-tier Band.ai, `cb setup-agents` may not be available. Create the ten default agents manually and write `agent_config.yaml`; the exact keys are documented in [Configuration](docs/CONFIGURATION.md).

For credential precedence, Docker auth, and subscription-vs-API-key behavior, see [Authentication](docs/AUTHENTICATION.md).

Expand Down Expand Up @@ -180,10 +180,12 @@ Conductor
| |
+--> Codex Coder -----> Claude Code Reviewer ---+--> Mergemaster
|
+--> Verifiers (Claude + Codex acceptance gate)
|
+--> Watchdog
```

The default config uses eight Band.ai agents: Conductor, Mergemaster, one Planner, one Plan Reviewer, two Coders, and two Reviewers. The Watchdog is an in-process daemon and does not consume a Band.ai agent seat.
The default config uses ten Band.ai agents: Conductor, Mergemaster, one Planner, one Plan Reviewer, two Coders, two Reviewers, and two Verifiers. The Watchdog is an in-process daemon and does not consume a Band.ai agent seat.

For the full design, see [ARCHITECTURE.md](ARCHITECTURE.md).

Expand All @@ -201,6 +203,8 @@ For the full design, see [ARCHITECTURE.md](ARCHITECTURE.md).

Codeband is alpha software. The current architecture is prompt-driven: agents follow structured prompts, and the Conductor relies on model context plus memory state to track protocol progress. The roadmap is to move more protocol state and branch enforcement into deterministic Python code.

The state-store schema is not migrated across structural changes: after upgrading past the task-scoped subtask-identity change, delete any pre-existing `{workspace}/state/orchestration.db` before the next run. The same applies after the task-registration change (tasks now carry a required owner and an `owner_handle` column, and re-seeding supersedes the previous task): delete pre-existing dev DBs so stale ownerless or duplicate-active task rows don't linger.

Pool scaling is supported, but first-dispatch worker arbitration is still prompt-enforced. For best results, scale coders and their opposite-framework reviewers together, keep planner/plan-reviewer pools small, and avoid configurations where several coders must share one reviewer unless you are comfortable with queued or overlapping review turns.

Current planned work:
Expand Down
Loading