2026-08-28 - 2026-09-28

Overview

106 Active Pull Requests
239 Active Issues
Excluding merges, 2 authors have pushed 82 commits to main and 412 commits to all branches. On main, 69 files have changed and there have been 4671 additions and 812 deletions.

106 Pull requests merged by 2 users

Merged #620 fleetd #612 Unit A: extract main's boot composition into FleetdAssembly/FleetdRuntime 2026-09-22 07:43:40 +02:00

Merged #628 fleetd #612 B3: behavioural replacements for lead-seat, quarantine, lead-rollover guards 2026-09-22 07:36:05 +02:00

Merged #626 fleetd #612 step 2 unit B2: behavioural replacements for the CB-185 pair 2026-09-22 07:19:29 +02:00

Merged #627 fleetd #612 Unit B1: CompletionResolver behavioural test (replaces source-text guard) 2026-09-22 07:14:26 +02:00

Merged #624 fleetd #612 A-gaps: coordinator path + reportRoleFallbackGaps inside the assembly boundary 2026-09-22 06:41:42 +02:00

Merged #623 #608 replace MessageService timing sleeps 2026-09-22 06:38:30 +02:00

Merged #622 fleetd #621: make the context-roll notice obey requireOperatorConfirm 2026-09-22 06:31:02 +02:00

Merged #619 fleetd #618: state the measured auto-compact precedence 2026-09-22 05:53:36 +02:00

Merged #601 CB-617: pass auto-compact window to leads 2026-09-22 05:22:57 +02:00

Merged #617 fleetd #615: write FAILED instead of leaving status(token) stuck at IN_PROGRESS 2026-09-22 05:21:21 +02:00

Merged #616 fleetd #613: boot log for role fallback gaps + heartbeat contextHighNudge 2026-09-22 05:17:53 +02:00

Merged #614 fleetd CI: unreadableFileIsUnknown is red on main under root 2026-09-20 12:43:44 +02:00

Merged #610 fleetd #609: nudge an idle lead to hand over when its own context reads HIGH 2026-09-20 12:37:43 +02:00

Merged #611 fleetd #608: make anAlreadyCollectedTicketProducesNoNudge deterministic 2026-09-20 12:26:16 +02:00

Merged #602 fleetd: report a lead's live context usage in fleet_list 2026-09-20 11:38:31 +02:00

Merged #606 fleetd #602 gauge-wiring: thread a lead's configured configDir into the context gauge 2026-09-20 11:38:22 +02:00

Merged #607 fleetd #603: share HEALTH_WAIT between the pid poll and the health check 2026-09-20 11:30:10 +02:00

Merged #605 #604 item 1: fleet_list reports charterBytes alongside charterSha256 2026-09-20 11:18:17 +02:00

Merged #599 fleetd #589 (Groups 1 & 2): pin 6 main() wiring sites with named factories 2026-09-19 10:39:48 +02:00

Merged #597 fleetd #593 (pid-count half): running_pid() no longer matches the caller 2026-09-19 10:37:50 +02:00

Merged #598 #589 Group 3: wiring-test 5 sites below line 500 in Fleetd.main() 2026-09-19 10:33:07 +02:00

Merged #596 #568: add hunter member role 2026-09-19 10:13:27 +02:00

Merged #583 #582: assert pending message-id cleanup 2026-09-12 15:52:25 +02:00

Merged #574 fleetd #572: pin answer()'s session-lock release across all four exits 2026-09-12 13:30:23 +02:00

Merged #573 fleetd #567: assert inspect closes probe channel 2026-09-12 13:26:31 +02:00

Merged #570 fleetd #561: harden the completion/session TurnListener fan-out 2026-09-12 13:20:56 +02:00

Merged #569 fleetd #551: record the delivery attempt before the irreversible send 2026-09-12 13:19:20 +02:00

Merged #565 fleetd #555: lift 8 main-flow decisions into tested predicate/dispatch functions 2026-09-12 12:19:48 +02:00

Merged #566 fleetd #556: make turn registration structural, independent of any TurnListener 2026-09-12 12:18:16 +02:00

Merged #564 fleetd #513: fix TIMED_OUT_QUEUED javadoc — cancelled, not queued 2026-09-12 11:48:54 +02:00

Merged #558 CLAUDE.md: the ticket is the pull channel, and the brief is write-once 2026-09-12 11:12:55 +02:00

Merged #559 fleetd #544: progress watchdog for StatusPoller and SessionReaper loops 2026-09-12 11:11:47 +02:00

Merged #560 fleetd #552: warn instead of aborting when the post-restart mktemp fails 2026-09-12 10:58:10 +02:00

Merged #557 fleetd #553: register the rendezvous waiter in onStatus's finally backstop 2026-09-12 10:50:25 +02:00

Merged #554 fleetd #550: portable hash256 helper for jar_id, Linux CI job for the shell suite 2026-09-12 10:20:29 +02:00

Merged #549 fleetd #546: widen Injector's delivery catch to Throwable 2026-09-12 09:39:41 +02:00

Merged #548 fleetd #545: fix mktemp -t templates for GNU coreutils, split unclear-supervisor detail 2026-09-12 09:30:30 +02:00

Merged #547 fleetd #512 follow-up: record why the drain-complete line must not move into a finally 2026-09-12 09:29:47 +02:00

Merged #541 fleetd #504 item 1: stop the false ok on the loaded-but-not-running stop path 2026-09-12 09:09:00 +02:00

Merged #543 fleetd #538: recover polling loops after errors 2026-09-12 09:02:49 +02:00

Merged #542 fleetd #426: pin FleetHealthMonitor.coverage and its HealthCoverageSource call site 2026-09-12 08:55:46 +02:00

Merged #539 fleetd #459: lint Javadoc references in CI 2026-09-12 08:46:23 +02:00

Merged #540 fleetd #537: pin CapturedLog.close()'s appender-detach and setLevel-immunity contracts 2026-09-12 08:42:19 +02:00

Merged #536 fleetd #535: convert FleetdLeadMailboxSelectionTest to CapturedLog 2026-09-12 08:25:01 +02:00

Merged #534 fleetd #512 part 2: detect a died shutdown drain the ERROR count is blind to 2026-09-12 08:04:15 +02:00

Merged #533 fleetd #529: promote CapturedLog to a shared test helper, close the logger-level leak 2026-09-12 07:57:25 +02:00

Merged #532 fleetd #528: pin drain_gate_refusal's call site, not just the predicate 2026-09-12 07:41:57 +02:00

Merged #531 charter: separate the blocked forge MCP server from the working GITEA_TOKEN 2026-09-12 07:41:11 +02:00

Merged #527 fleetd #525: restore the logger level, not just the appender, in SessionManagerTest 2026-09-12 07:20:45 +02:00

Merged #524 fleetd #518: FleetMcp caller resolution is an explicit choice, and tested for real 2026-09-12 07:10:22 +02:00

Merged #526 fleetd #521: extract should_swap so the swap guard can't be silently disabled 2026-09-12 07:01:55 +02:00

Merged #523 fleetd #519: test policy probe guards 2026-09-12 06:59:02 +02:00

Merged #522 fleetd #512 (part 1): log a positive completion line when drainAll finishes 2026-09-12 06:34:52 +02:00

Merged #520 fleetd #517: pin the drain-gate abort branch and jar_id absent case 2026-09-12 06:29:09 +02:00

Merged #516 fleetd #500: honest refusal when the policy parse fails, not just when it's empty 2026-09-12 06:09:51 +02:00

Merged #515 fleetd #509: pin the pane-scan completeness fold; harden legacyPrincipal 2026-09-12 06:06:13 +02:00

Merged #514 fleetd #511: fix wrong --no-build wording in drain-gate abort, pin jar_id() default 2026-09-12 06:00:24 +02:00

Merged #510 fleetd #493: never build into the path a running daemon holds 2026-09-12 05:44:17 +02:00

Merged #508 fleetd #505: refuse (not promote) a caller whose pane scan errored 2026-09-12 05:35:42 +02:00

Merged #503 fleetd #501: readiness-grace expiry logs measured elapsed time and poll counter 2026-09-12 05:07:36 +02:00

Merged #499 fleetd #492 follow-up: detect_supervisor must never read "could not tell" as "none" 2026-09-12 05:04:04 +02:00

Merged #502 fleetd #498: awaitHerdr distinguishes deadline-passed from interrupted, with measured elapsed time 2026-09-12 05:01:02 +02:00

Merged #496 fleetd #494: log measured elapsed time, not the configured budget, on lead-rollover failure/success 2026-09-12 04:44:10 +02:00

Merged #490 fleetd #489: nudge the /clear submit keystroke before bootstrapText 2026-09-12 02:52:52 +02:00

Merged #485 fleetd #480 Unit C: fleet_handover MCP tool 2026-09-11 02:27:56 +02:00

Merged #484 fleetd #480 Unit E: BLOCKED is not a settled turn boundary 2026-09-11 02:21:06 +02:00

Merged #483 fleetd #480 Unit A: lead rollover core (config block + executor) 2026-09-11 01:51:21 +02:00

Merged #481 fleetd #480 Unit B: add handover skill for lead handoff 2026-09-11 01:16:40 +02:00

Merged #461 #455: document herdr test socket exception 2026-09-10 13:18:18 +02:00

Merged #456 fleetd #453: document PeerLauncher.defaultProfileFor/place override obligation 2026-09-10 13:04:10 +02:00

Merged #452 fleetd #449: fix stale herdr protocol 14, diagnose AgentControlContractTest timing race, CI selects contract tests by tag 2026-09-10 12:35:10 +02:00

Merged #448 fleetd #437: fleet_ack errors instead of claiming success on a miss 2026-09-10 12:20:49 +02:00

Merged #451 fleetd #450: make PeerLauncher.spawn(SpawnRequest, PlacementDecision) abstract 2026-09-10 12:16:47 +02:00

Merged #447 fleetd #444: test that pins the place()-to-spawn() window PlacementDecision closes 2026-09-10 12:00:59 +02:00

Merged #445 fleetd #442: pin startup report calls 2026-09-10 11:30:31 +02:00

Merged #443 fleetd #440: derive coordinator.heldDurable from queue durability + ack mode 2026-09-10 11:21:41 +02:00

Merged #433 fleetd #425 rework: resolve acquireWithWorktree via real placement routing 2026-09-10 09:35:02 +02:00

Merged #438 fleetd #421: let a lead peek its own held peer mail, primary-only 2026-09-10 09:08:18 +02:00

Merged #436 fleetd #435: FixedPlacementPolicy now honors maxLoad 2026-09-10 08:54:19 +02:00

Merged #434 fleetd #422 follow-up: make the model gate's own state observable 2026-09-10 08:32:55 +02:00

Merged #432 fleetd #431: pin profileForSlot, isSlot, nameForSlot against a live reload 2026-09-10 08:24:27 +02:00

Merged #429 fleetd #422: enforce model allow-list on/off at spawn, hot reload 2026-09-10 07:44:36 +02:00

Merged #423 fleetd #415: split coverage() feature-state wording by pattern fallback semantics 2026-09-10 06:57:34 +02:00

Merged #419 fleetd #418: barrier the throw-path push-loop test on state decide() reads 2026-09-10 06:29:23 +02:00

Merged #420 fleetd #416: fleet_list must enumerate the STARTUP profile set 2026-09-10 06:27:37 +02:00

Merged #414 fleetd #409: deterministic test for the #399 completion-stamp ordering race 2026-09-10 04:48:45 +02:00

Merged #406 fleetd #404: report armed detection from startup map 2026-09-10 04:20:55 +02:00

Merged #402 fleetd #391: refuse lead fleet replies 2026-09-10 04:18:37 +02:00

Merged #405 fleetd #399: fix TTL test race — wait on completion stamp, not Phase.DONE 2026-09-10 04:14:30 +02:00

Merged #363 #362: make the plugin visible, and fix the drift that made it unusable 2026-09-05 07:50:19 +02:00

Merged #235 CB-612: suppress unneeded token warnings 2026-09-03 05:02:27 +02:00

Merged #233 fleetd #176: fail-fast + safe UNKNOWN refinement in the spawn-readiness gate 2026-09-03 04:20:23 +02:00

Merged #231 fleetd #175: check opencode's actual model against the profile, quarantine on a real mismatch 2026-09-02 13:01:34 +02:00

Merged #229 fleetd#222: put the claude-code charter file where the member can read it 2026-09-02 02:56:36 +02:00

Merged #228 fleetd #226: reserve architect slots before launch 2026-09-02 02:54:52 +02:00

Merged #230 fleetd #224 / #225: share worktreeRoot with the group + fix a CWD-dependent group test helper 2026-09-02 02:52:12 +02:00

Merged #223 CB-619 / fleetd #123: refuse an architect spawn with no matching slot 2026-09-01 10:41:47 +02:00

Merged #221 fleetd#219: fix OpenCodeLauncher config/discovery roots under memberHerdrSocket 2026-09-01 10:33:05 +02:00

Merged #198 #197: measure the async ticket TTL from completion, not from creation 2026-08-31 05:10:46 +02:00

Merged #195 CB-189: cover every remote, both URLs, and any non-SSH scheme in the credential check 2026-08-31 04:32:15 +02:00

Merged #196 CB-185: fix two blockers to switching on memberHerdrSocket 2026-08-31 04:30:57 +02:00

Merged #194 CB-192: fix false credential-gap WARN under allow-list+zsh, split its log guard 2026-08-31 04:30:49 +02:00

Merged #193 #168: audit current wiki snapshot 2026-08-31 04:17:07 +02:00

Merged #186 CB-185: route members to separate herdr 2026-08-29 01:24:32 +02:00

Merged #188 CB-185: fix connection-identity/status/health gaps a second herdr daemon exposes 2026-08-29 01:24:26 +02:00

Merged #187 #185: refuse an unowned paneId when more than one herdr daemon could own it 2026-08-29 01:10:22 +02:00

188 Issues closed from 3 users

Closed #621 contextNotice hardcodes "ask the operator" and ignores requireOperatorConfirm, so the knob cannot actually stop the asking 2026-09-22 06:31:02 +02:00

Closed #615 A herdr throw during a lead roll leaves status(token) reporting IN_PROGRESS forever 2026-09-22 05:21:34 +02:00

Closed #613 A role with no pool and no charter starts anyway, and nothing at boot says so 2026-09-22 05:18:25 +02:00

Closed #608 Flaky: MessageServiceTest.anAlreadyCollectedTicketProducesNoNudge orders an async scheduler with Thread.sleep 2026-09-20 12:27:31 +02:00

Closed #603 redeploy-fleetd.sh reports "no process appeared" on a deploy that fully succeeded 2026-09-20 11:30:10 +02:00

Closed #582 AmqpReplyInbox / LeadMailbox: the pendingByMsgId half of the dual-map cleanup is unasserted at every error-path site (from the #577 sweep) 2026-09-12 15:53:02 +02:00

Closed #562 LoopWatchdog.health() is public and nothing reads it — surface it without breaking the two scripts that parse /healthz 2026-09-12 15:31:21 +02:00

Closed #581 CompletionResolver: 9 sites maintain the CAS-remove invariant, only 2 are asserted (from the #577 sweep) 2026-09-12 15:31:17 +02:00

Closed #571 MessageService collapses the new ATTEMPTED state into TIMED_OUT_QUEUED, so a possibly-delivered message is reported as one that will never arrive 2026-09-12 15:31:13 +02:00

Closed #577 Sweep: find every invariant kept at N sites but asserted at fewer than N 2026-09-12 15:08:09 +02:00

Closed #575 The waiter cleanup in MessageService is maintained at three sites, and one of them is outside any finally 2026-09-12 14:05:24 +02:00

Closed #567 LeadMailbox.inspect leaks a probe channel if the close is removed, and 15 contract tests stay green while the line runs 3 times 2026-09-12 13:26:36 +02:00

Closed #551 Injector records the delivery AFTER the irreversible send, so a failure in the response window marks a delivered brief NOT_DELIVERED 2026-09-12 13:19:20 +02:00

Closed #556 TurnListener implementations are the only thing maintaining the Injector's own invariant 2026-09-12 12:21:09 +02:00

Closed #555 redeploy-fleetd.sh: the 67-test suite covers the functions and barely touches the main flow 2026-09-12 12:19:48 +02:00

Closed #513 MessageService's TIMED_OUT_QUEUED javadoc says the message is still queued; the code 12 lines of behaviour later cancels it 2026-09-12 11:48:54 +02:00

Closed #544 A dead StatusPoller or SessionReaper can now be restarted, but nothing restarts it and nothing notices 2026-09-12 11:13:27 +02:00

Closed #552 redeploy-fleetd.sh exits non-zero after a SUCCESSFUL restart if the post-restart mktemp fails, reporting a working deployment as a failure 2026-09-12 10:58:10 +02:00

Closed #553 A throwable from any listener callback in onStatus skips the delivered-future completion, so a caller waits forever on a message that WAS delivered 2026-09-12 10:51:10 +02:00

Closed #550 shasum is macOS-only: on Linux redeploy-fleetd.sh reports an existing jar as "absent" with exit 0, and the shell suite dies at 127 looking green 2026-09-12 10:21:23 +02:00

Closed #545 redeploy-fleetd.sh cannot run on Linux at all: every mktemp -t NAME fails under GNU coreutils, and the script blames the systemd bus for it 2026-09-12 09:42:33 +02:00

Closed #546 Merging #543 made re-delivery reachable: an Error after Injector's send now loops and types the same brief again 2026-09-12 09:39:41 +02:00

Closed #538 An Error in StatusPoller.loop or SessionReaper.loop kills the thread permanently and silently, and start() then refuses to restart it 2026-09-12 09:03:17 +02:00

Closed #426 FleetHealthMonitor.coverage has no test at all, and it feeds fleet_list's healthCoverage field 2026-09-12 08:56:09 +02:00

Closed #459 Five {@link} targets in main do not exist, and nothing in CI would ever say so 2026-09-12 08:46:50 +02:00

Closed #537 CapturedLog.close() detaches the appender and no test proves it — the fix for #525/#529/#535 is itself unpinned 2026-09-12 08:42:46 +02:00

Closed #535 FleetdLeadMailboxSelectionTest leaks three ListAppenders onto the shared Fleetd logger, and the appender-balance invariant catches it 2026-09-12 08:26:33 +02:00

Closed #512 redeploy-fleetd.sh says "no ERROR lines since restart" while blind to the exact failure #493 is about 2026-09-12 08:05:43 +02:00

Closed #529 Tests pin shared logger levels and never restore them: 9 files, 19 pins, one proven cross-class collision — share SessionManagerTest's CapturedLog 2026-09-12 08:00:33 +02:00

Closed #528 "Extract the decision so the suite can call it" pins the decision and never the wiring — drain_gate_refusal's call site can be bypassed with the suite green 2026-09-12 07:42:32 +02:00

Closed #525 A test pins the shared SessionManager logger to WARN and never restores it, so any later test asserting an INFO line silently sees nothing 2026-09-12 07:22:02 +02:00

Closed #518 Nothing tests that FleetMcp uses the CallerResolver — forcing the legacy identity path leaves the whole suite green at 1696/0 2026-09-12 07:10:23 +02:00

Closed #521 The swap guard can be disabled with the suite green — a "successful" redeploy that never puts the new jar in place 2026-09-12 07:03:29 +02:00

Closed #519 probe-member-credentials.sh has no test harness at all, and its new arity message is off by one on an empty parse 2026-09-12 06:59:54 +02:00

Closed #517 A source-text test pins what a message SAYS and never whether it is REACHED — the drain-gate abort branch can be disabled with the suite green 2026-09-12 06:30:42 +02:00

Closed #500 probe-member-credentials.sh uses mapfile (bash 4+) with no set -e, so on bash 3.2 it silently reports an empty field list 2026-09-12 06:10:43 +02:00

Closed #509 #505 follow-up: the two-client completeness fold is unpinned, and legacyPrincipal can still re-open the escalation 2026-09-12 06:07:06 +02:00

Closed #511 #493 follow-up: the drain-gate abort message names a recovery that does not work, and jar_id()'s default is unpinned 2026-09-12 06:01:13 +02:00

Closed #493 redeploy-fleetd.sh builds into the LIVE jar path, so the shutdown drain can die on a class it never loaded (#413) 2026-09-12 05:53:55 +02:00

Closed #505 A herdr error during the pane scan makes a worker's connection resolve as the primary — #317's escalation, through the door #317 did not close 2026-09-12 05:36:17 +02:00

Closed #492 redeploy-fleetd.sh is launchd-only: on fleet01 it kills the daemon and leaves TWO running 2026-09-12 05:14:39 +02:00

Closed #501 Injector's readiness-grace warn prints the configured budget as if it were elapsed time — #494's defect, in the delivery loop 2026-09-12 05:11:24 +02:00

Closed #498 awaitHerdr has two return-false paths and the caller reports both as "did not answer within 30s" 2026-09-12 05:01:33 +02:00

Closed #494 LeadRollover's failure logs print the CONFIGURED budget, not the measured wait — the exact thing that hid #489 2026-09-12 04:46:18 +02:00

Closed #474 A charter naming an unregistered tool is refused at startup but accepted on reload 2026-09-10 23:15:36 +02:00

Closed #399 MessageServiceTest TTL test races the completedNanos stamp — passes on macOS, fails on Linux 2026-09-10 15:37:45 +02:00

Closed #464 Nothing checks charter text against the tool surface the server registers 2026-09-10 15:36:25 +02:00

Closed #400 SECURITY (receipt): the scrub reports a name as blanked when eval returned 0 without blanking it 2026-09-10 15:35:17 +02:00

Closed #393 "skill seeding: N of M" is logged as success for opencode members, which never read .claude/skills/ 2026-09-10 15:18:57 +02:00

Closed #469 Charter text is still never checked against the live tool surface — one canonical tool-name set (follow-up to #464) 2026-09-10 15:11:23 +02:00

Closed #424 Revoking an architect slot does not revoke it: MemberRegistry freezes fleet.architects, and the reload says it applied 2026-09-10 14:38:59 +02:00

Closed #463 listFleet's compat overloads default callerIsPrimary to true, so the coordinator gate fails open 2026-09-10 14:17:13 +02:00

Closed #446 The model gate can be turned off at runtime but its usage-limit detector cannot be turned on at runtime 2026-09-10 14:17:10 +02:00

Closed #458 Canonical invariant 5 states a mechanism where it means a purpose — restate it (blocked on #455) 2026-09-10 13:59:23 +02:00

Closed #439 fleet_list hands every worker the coordinator row: peer coord-ids and 80-char previews of lead-to-lead bodies 2026-09-10 13:44:30 +02:00

Closed #455 Invariant 5 ("never drive the multiplexer directly, no socket") is unsatisfiable for a worker assigned to herdr code 2026-09-10 13:18:18 +02:00

Closed #453 PeerLauncher.place(role) and defaultProfileFor(role) are default methods that silently ignore the role 2026-09-10 13:07:40 +02:00

Closed #422 Model gating units 2+3: enforce the allow-list at spawn, and turn one model off at runtime without editing profiles 2026-09-10 12:48:01 +02:00

Closed #449 The herdr contract tests were left behind by the protocol-19 port, and nothing runs them 2026-09-10 12:37:27 +02:00

Closed #437 fleet_ack says "acknowledged <msgId>" for a held peer message it never touches 2026-09-10 12:21:13 +02:00

Closed #450 PeerLauncher's default spawn(req, decision) is still the #425 defect, and nothing tests it — make it abstract 2026-09-10 12:17:12 +02:00

Closed #444 PlacementDecision's javadoc claims the place()-to-spawn() window is closed, but no test pins it — and PeerLauncher's default spawn(req, decision) reopens it 2026-09-10 12:01:35 +02:00

Closed #442 Deleting any of the four startup report calls from Fleetd.main leaves the suite green 2026-09-10 11:31:17 +02:00

Closed #440 coordinatorView reports heldDurable as a hardcoded true, so it cannot go false when durability breaks 2026-09-10 11:21:41 +02:00

Closed #425 fleet_profiles reports a frozen "default" profile while placement already moved to a new one 2026-09-10 09:35:44 +02:00

Closed #441 Nothing warns that a profile has no usage-limit detection, so "off when the subscription limit is reached" silently covers only the profiles that opted in 2026-09-10 09:29:04 +02:00

Closed #421 A lead can neither read nor safely keep its own held peer messages — the only drain is an injectable pane 2026-09-10 09:08:18 +02:00

Closed #435 maxLoad says it is excluded from "every automatic policy" — fixed, the default, ignores it 2026-09-10 08:55:03 +02:00

Closed #415 The startup coverage line reports "off" for errorPattern, but legacy classification is still running 2026-09-10 06:57:46 +02:00

Closed #417 Sweep for the REVERSE config mismatch: a boot snapshot read where the key is hot 2026-09-10 06:46:48 +02:00

Closed #418 Second instance of the #399 shape: a test uses Phase.ASKING as a barrier for push-loop state published later 2026-09-10 06:29:43 +02:00

Closed #416 fleet_list advertises free capacity for a profile the spawn gate refuses — CapacitySource reads the live profile keySet 2026-09-10 06:27:37 +02:00

Closed #409 The #399 completion-stamp race is verifiable deterministically — nowNanos is already injectable 2026-09-10 04:49:41 +02:00

Closed #404 exhaustionDetectionArmed reads the LIVE config while detection reads the STARTUP snapshot — after a reload it reports armed when detection is still off 2026-09-10 04:21:58 +02:00

Closed #391 fleet_reply cannot answer a peer lead — the charter documents a path that does not exist 2026-09-10 04:21:39 +02:00

Closed #395 A profile with no exhaustedPattern has usage-limit detection silently OFF — 6 of 8 live profiles, including both Claude subscription ones 2026-09-10 03:46:47 +02:00

Closed #394 SECURITY: the credential scrub aborts silently at the first read-only parameter, leaving every later name unscrubbed 2026-09-10 03:31:31 +02:00

Closed #190 Process argv is a credential channel we never enumerated: 4 secrets are readable by any local user via ps 2026-09-10 02:11:28 +02:00

Closed #386 Every fleetd timer freezes while the macOS host sleeps: System.nanoTime() stops, so the stall detector missed a member that was BUSY for 101 minutes 2026-09-10 02:00:24 +02:00

Closed #384 "left no scrub report" has a third, benign cause it does not name — a group-shared ZDOTDIR cannot receive the receipt 2026-09-10 01:55:28 +02:00

Closed #382 SpawnRequest has the arity trap's two halves, but not yet a colliding arity — CompositePeerLauncher:372 will drop the next component added 2026-09-10 01:55:23 +02:00

Closed #381 Members cannot run shell commands: the classifier refuses every one, so they cannot build, test or open a PR (3 members, 2 profiles) 2026-09-10 01:38:55 +02:00

Closed #385 A lead-coordination message can be delivered forever: ack() returns success when connection recovery cleared the held entry 2026-09-10 01:29:44 +02:00

Closed #377 GITEA_HOST carries a scheme and a trailing slash, and every member builds URLs from it 2026-09-09 02:53:55 +02:00

Closed #365 Three more tool results claim "delivered" for something weaker than delivery 2026-09-09 02:41:39 +02:00

Closed #373 The hermetic env on production GitWorktrees instances is unpinned — stripping it stays green, poisoned or not 2026-09-09 02:39:35 +02:00

Closed #358 Two more records can silently drop a field the way FleetConfig could (MemberSession, FleetConfig.Profile) 2026-09-09 02:39:14 +02:00

Closed #376 A fast model trips the 2000ms crash floor: a real answer is reported as a failed turn 2026-09-09 02:28:43 +02:00

Closed #352 CompositePeerLauncher.clearContext silently stops working for every peer that survives a restart 2026-09-09 02:17:04 +02:00

Closed #375 The idle-sleep guard is a no-op on Linux, so fleet01 still sleeps under a live member 2026-09-09 02:15:30 +02:00

Closed #369 GitWorktreesTest reads the machine's real git config, so it can pass or fail for reasons outside the repo 2026-09-06 15:33:22 +02:00

Closed #368 A lead's delegation binding outlives the lead, so reply nudges keep going to a dead terminal 2026-09-06 15:17:55 +02:00

Closed #360 deploy/fleetd.service silently disables caller identity and the credential scrub 2026-09-06 15:07:06 +02:00

Closed #359 Dead lead tabs accumulate and make lead-to-lead coordination permanently undeliverable 2026-09-06 07:10:47 +02:00

Closed #362 The plugin shipped in CB-527 is invisible and has drifted — and it cannot deliver worker skills 2026-09-05 08:34:39 +02:00

Closed #361 Lead-to-lead coordination has a send half with tools and a receive half without 2026-09-05 08:21:33 +02:00

Closed #334 MessageService: an async ticket is still stranded between clearAsyncQuestion and closeAsk 2026-09-04 12:13:25 +02:00

Closed #348 The same text-match-drives-a-cooldown shape exists for ExhaustionSink, where the penalty is 30x longer 2026-09-04 11:58:11 +02:00

Closed #335 MessageService: three more places a thrown exception has nowhere to go 2026-09-04 11:49:24 +02:00

Closed #342 CompositePeerLauncher's single-daemon stop() shortcut can skip tab teardown, orphaning a worker tab 2026-09-04 11:41:07 +02:00

Closed #345 MessageService's use of Cancellation.DELIVERED is unpinned — the seam is tested, the caller is not 2026-09-04 11:35:46 +02:00

Closed #337 The deferred key set still has no reporting coverage — measured, a dropped comparison is invisible 2026-09-04 11:19:43 +02:00

Closed #341 One flag guards two different memberCredentials WARNs, so a later leaking credential name is never reported 2026-09-04 11:14:41 +02:00

Closed #339 A member's normal report that quotes "API Error:" is recorded as a real backend outage 2026-09-04 11:14:36 +02:00

Closed #338 A TIMED_OUT_QUEUED send leaves its message in the injector queue, and it is delivered later as a stale brief 2026-09-04 11:01:27 +02:00

Closed #333 fleet: is a third split key, sitting in the coverage checker's own escape hatch — and SPLIT_KEYS membership does not prove any reporting code exists 2026-09-04 10:44:36 +02:00

Closed #329 sendAsync's executor catch swallows every exception thrown after the future completes, and that is why a stranded async ticket is invisible 2026-09-04 10:35:24 +02:00

Closed #330 health: and coordinator: are split keys — add a fourth reload class that says so, then make the top-level list prove its own coverage 2026-09-04 10:22:50 +02:00

Closed #326 The top-level deferred-key list has the same drift as #323, and two keys are read both from the startup snapshot and live — no single classification is right for them 2026-09-04 09:58:49 +02:00

Closed #324 answer() mutates a Task under sessionLocks while ask()'s timeout path mutates the same Task under no lock — finishAsyncTask can throw NPE on a null turnId 2026-09-04 09:52:56 +02:00

Closed #323 The reload classifier says "compares every component the launcher reads at spawn" and misses four keys, so those reloads report success and do nothing 2026-09-04 09:32:47 +02:00

Closed #318 A reply delivered while release() is running is stranded unacked forever: #298 closed "already held", not "arrives during release" 2026-09-04 09:24:05 +02:00

Closed #316 The dirty-worktree check runs before the worker is stopped, so work written during teardown is deleted with no preserve and no snapshot 2026-09-04 09:23:58 +02:00

Closed #317 A failed peer-PID lookup promotes a worker to primary: the escalation PaneLocator's own javadoc names, through a trigger CB-161 did not close 2026-09-04 09:05:48 +02:00

Closed #315 The fixed placement policy ignores the retry loop's unreachable set, so an unqualified spawn retries the same dead profile and never tries the healthy one 2026-09-04 08:59:19 +02:00

Closed #307 A worker's report is stranded when its fleet_ask timed out, and the lead is told the worker never replied 2026-09-04 08:34:28 +02:00

Closed #309 A timed-out git worktree add leaks the worktree it half-created: #274's cleanup does not cover the add itself 2026-09-04 08:31:00 +02:00

Closed #308 A worker spawned during the shutdown drain is never drained: its pane is left running and its worktree is never preserved 2026-09-04 08:30:57 +02:00

Closed #310 reapIdle can release a session that just became BUSY, contradicting its own documented invariant 2026-09-04 08:23:27 +02:00

Closed #306 A worker that wedges in unknown during post-turn housekeeping is polled forever and can never be delivered to again 2026-09-04 08:06:34 +02:00

Closed #305 A worker connecting from 127.0.0.2 is resolved as the primary, and gains spawn/stop/send/drain 2026-09-04 07:58:27 +02:00

Closed #304 POST /members and DELETE /members/{paneId} turn a herdr failure into a bare 500, and a stop that already succeeded can never report success 2026-09-04 07:48:27 +02:00

Closed #302 A REST reply with no content field silently becomes an empty reply, and the lead cannot tell it from a member that said nothing 2026-09-04 07:36:58 +02:00

Closed #298 AmqpReplyInbox.release() drops an unacked reply that the broker still holds — a worker's report is lost silently 2026-09-04 07:23:55 +02:00

Closed #297 REST is the weaker door, and it is the door a lead falls back to when MCP drops 2026-09-04 07:20:14 +02:00

Closed #296 Two spawn-side exits leak a live pane, and the caller cannot clean up because it never learns the pane id 2026-09-04 07:10:16 +02:00

Closed #293 A failing tab.close during teardown leaks both the ZDOTDIR and the worktree 2026-09-04 06:50:45 +02:00

Closed #280 Follow-up to #275: a health-detected GONE member whose ask lapses may still strand its ticket 2026-09-04 06:33:48 +02:00

Closed #290 Restore a test for reapIdle's per-session guard, which #283 left uncovered 2026-09-04 06:28:29 +02:00

Closed #285 seedTrustDialog writes the trust seed to fleetd's own home when memberHerdrSocket is set, so the member never sees it 2026-09-04 06:14:08 +02:00

Closed #284 A BACKEND_ERROR member holds its seat forever: counted as live, never reaped, never reclaimable 2026-09-04 06:14:05 +02:00

Closed #283 Two teardown leaks in SessionManager: an unguarded worktree removal, and a branch the spawn-failure catch forgets 2026-09-04 06:00:32 +02:00

Closed #282 A second fleet_ask in the same resumed turn kills its own async ticket: answer() completes it with QUESTION 2026-09-04 06:00:04 +02:00

Closed #281 Pin the Authz.Action every handler chooses, so the next #272 fails a test instead of shipping 2026-09-04 05:53:04 +02:00

Closed #275 Investigate: abandon() skips a task in ASKING, so a torn-down member mid-fleet_ask may strand its ticket forever 2026-09-04 05:19:56 +02:00

Closed #274 GitWorktrees.add() leaks the worktree and branch when a step after git worktree add throws 2026-09-04 05:14:58 +02:00

Closed #273 A malformed exhaustedPattern crashes startup unnamed — only errorPattern is validated at load 2026-09-04 05:14:38 +02:00

Closed #272 fleet_poll{target} drains another session's inbox behind a READ gate — authorization fails open 2026-09-04 05:01:53 +02:00

Closed #276 #269 follow-up: the "allowed N of M" INFO line still claims to describe the member's pane 2026-09-04 05:01:48 +02:00

Closed #267 The #175 model-mismatch check never runs for opencode spawns without a provisioned worktree — the majority of them 2026-09-04 03:50:01 +02:00

Closed #266 memberCredentials.sshAuthSock: rename the values block/allow to omit/inherit — "block" names something fleetd does not do 2026-09-04 03:27:01 +02:00

Closed #103 CB-605: the systemd unit has launchd's login-shell secret gap, and does not mention the two tokens it drops 2026-09-03 11:36:04 +02:00

Closed #257 fleet_list's free and the spawn gate now disagree by one on subscription profiles 2026-09-03 11:35:37 +02:00

Closed #247 Seeding ~/.claude.json can still lose an external writer's change 2026-09-03 11:30:54 +02:00

Closed #141 CB-631: four credential env vars reach every member pane unblocked — the CB-596 policy has drifted 2026-09-03 11:25:08 +02:00

Closed #116 CB-613: one worker branch holds a teardown test that never reached main, and 55 stale branches hide it 2026-09-03 11:19:02 +02:00

Closed #252 The REST surface is a supported operator fallback and is documented nowhere — 14 routes, 0 entries 2026-09-03 11:01:06 +02:00

Closed #258 Two test fixtures write to the operator's real ~/.claude.json on every run (116 dead entries accumulated) 2026-09-03 09:01:54 +02:00

Closed #114 CB-609: docs/MCP-Contract.md is a pre-build design doc that CLAUDE.md still points every session at 2026-09-03 08:39:39 +02:00

Closed #113 CB-611: our checkers keep covering less than they look like they cover — three instances in one day 2026-09-03 08:38:25 +02:00

Closed #111 CB-608: the credential probe hardcodes its own name list, so it silently under-reports the policy 2026-09-03 08:37:57 +02:00

Closed #155 the member credential scrub is zsh-only: a member on any other login shell gets every credential 2026-09-03 08:30:36 +02:00

Closed #176 capacity counts panes, not subscription seats, so a subscription profile reports a free slot that cannot be filled 2026-09-03 08:26:20 +02:00

Closed #249 fleet_list can report another session's agentSessionId, and fleet_spawn{resumeSessionId} will resume it 2026-09-03 07:57:06 +02:00

Closed #115 CB-612: the daemon warns at every boot about a token no profile needs, teaching operators to skim startup warnings 2026-09-03 07:35:03 +02:00

Closed #149 A claude-code member spawned into a fresh worktree blocks forever on the workspace trust dialog 2026-09-03 07:32:29 +02:00

Closed #248 Fleetd's composition root is untested: a feature can be silently unwired and every test stays green 2026-09-03 07:25:13 +02:00

Closed #148 CB-634: the parity overlay copies .env/.envrc into worker worktrees — the same shape as CB-633 2026-09-03 07:05:26 +02:00

Closed #234 #175's model read-back fires a FALSE POSITIVE on any member spawned without a worktree — and the quarantine it announces never happens 2026-09-03 06:58:26 +02:00

Closed #227 A backend outage is invisible at fleet level: repeated backend errors are never correlated, never cool off a credential, and never reach the lead 2026-09-03 06:58:16 +02:00

Closed #201 Backend-error classification needs a real mechanism, not hard-coded strings (#164 points 3 and 4) 2026-09-03 06:58:04 +02:00

Closed #241 Completion fallback can hand the lead back its own brief as the member's "report" 2026-09-03 06:57:19 +02:00

Closed #134 CB-628: a tracked file neutralized by the worktree overlay can never be edited by a worker, and nothing says so 2026-09-03 06:32:34 +02:00

Closed #232 autoCompactWindow is set by flag and never read back — the #175 shape in a second place 2026-09-03 04:10:23 +02:00

Closed #175 fleetd asks opencode for a model and never checks it got that model, so a withdrawn name silently bills a paid credential 2026-09-02 13:06:09 +02:00

Closed #226 A member that loses the architect slot race still runs on the architect charter while the gate treats it as a worker 2026-09-02 03:05:10 +02:00

Closed #222 ClaudeCodeLauncher writes the member's charter file into fleetd's own java.io.tmpdir — the #219 site-1 shape, third instance 2026-09-02 03:04:46 +02:00

Closed #224 worktreeRoot itself is never made group-traversable, so a restrictive umask breaks every member under memberHerdrSocket 2026-09-02 03:04:25 +02:00

Closed #225 Two memberHerdrSocket tests pass or fail depending on where the repo is checked out 2026-09-02 03:04:04 +02:00

Closed #123 CB-619: a spawn asking for a role its profile has no slot for is silently demoted to worker, and the roster still says otherwise 2026-09-01 10:42:42 +02:00

Closed #219 OpenCodeLauncher decides a member's config and discovery roots from fleetd's own filesystem — the #213 defect, twice 2026-09-01 10:34:04 +02:00

Closed #140 CB-630: every subscription claude-code profile fails to spawn — the pane exits and the error names a symptom 2026-09-01 09:18:46 +02:00

Closed #213 #185: the ZDOTDIR scrub decides on fleetd's own shell and writes to fleetd's own TMPDIR, so under memberHerdrSocket it silently protects nothing 2026-09-01 09:13:19 +02:00

Closed #211 A backend-exhausted pane with no ⏺ marker is classified as an empty scrape, so the credential is never quarantined 2026-09-01 09:13:03 +02:00

Closed #214 A plain claude-code spawn mints no session id, so the most common member on the fleet can never be resumed 2026-09-01 09:12:48 +02:00

Closed #220 Launch command is typed into the pane and silently cut at 1024 bytes 2026-09-01 09:12:28 +02:00

Closed #209 agentSessionId is resolved once at spawn and frozen, so an opencode member never reports one 2026-08-31 18:29:04 +02:00

Closed #199 GET /members returns its rows under a "workers" key, so a caller reading "members" sees an empty fleet 2026-08-31 17:20:24 +02:00

Closed #206 opencode session discovery never finds a member's record, so agentSessionId is always null and resume silently does nothing 2026-08-31 16:59:36 +02:00

Closed #137 CB-629: after a bridge_ask round-trip, the worker's final reply orphans its ticket, which then reports a false failure 2026-08-31 09:27:34 +02:00

Closed #172 LAVINMQ_URI reaches every member pane with the broker password inline — on neither credential list, and not credential-shaped 2026-08-31 09:27:33 +02:00

Closed #161 a pane member's grandchild process may be resolved as primary — possible worker→primary escalation 2026-08-31 09:27:32 +02:00

Closed #126 CB-622: rename the MCP tool namespace bridge_* -> fleet_*, with one dual-name release 2026-08-31 09:00:14 +02:00

Closed #164 a member whose backend 400s dies in one second, and fleetd returns the lost turn as a successful empty reply 2026-08-31 05:57:32 +02:00

Closed #168 CB-638: the wiki describes a system that no longer exists — audit index of pages to revise, build and retire 2026-08-31 05:50:02 +02:00

Closed #197 Async ticket TTL runs from creation, so a long task's report is destroyed on arrival 2026-08-31 05:10:46 +02:00

Closed #192 CB-633 follow-up: the credential-gap WARN claims names are inherited unblocked when the scrub does blank them, and one guard can hide the real report 2026-08-31 04:34:01 +02:00

Closed #189 CB-157 follow-up: the remote-URL credential checks only see origin, only https, and never a push URL 2026-08-31 04:32:15 +02:00

218 Issues created by 2 users

Opened #189 CB-157 follow-up: the remote-URL credential checks only see origin, only https, and never a push URL 2026-08-31 03:39:04 +02:00

Opened #190 Process argv is a credential channel we never enumerated: 4 secrets are readable by any local user via ps 2026-08-31 03:41:01 +02:00

Opened #192 CB-633 follow-up: the credential-gap WARN claims names are inherited unblocked when the scrub does blank them, and one guard can hide the real report 2026-08-31 03:47:56 +02:00

Opened #197 Async ticket TTL runs from creation, so a long task's report is destroyed on arrival 2026-08-31 04:25:47 +02:00

Opened #199 GET /members returns its rows under a "workers" key, so a caller reading "members" sees an empty fleet 2026-08-31 05:50:23 +02:00

Opened #201 Backend-error classification needs a real mechanism, not hard-coded strings (#164 points 3 and 4) 2026-08-31 05:57:59 +02:00

Opened #206 opencode session discovery never finds a member's record, so agentSessionId is always null and resume silently does nothing 2026-08-31 09:26:10 +02:00

Opened #209 agentSessionId is resolved once at spawn and frozen, so an opencode member never reports one 2026-08-31 16:57:12 +02:00

Opened #211 A backend-exhausted pane with no ⏺ marker is classified as an empty scrape, so the credential is never quarantined 2026-08-31 17:08:58 +02:00

Opened #213 #185: the ZDOTDIR scrub decides on fleetd's own shell and writes to fleetd's own TMPDIR, so under memberHerdrSocket it silently protects nothing 2026-08-31 17:19:02 +02:00

Opened #214 A plain claude-code spawn mints no session id, so the most common member on the fleet can never be resumed 2026-08-31 17:40:20 +02:00

Opened #219 OpenCodeLauncher decides a member's config and discovery roots from fleetd's own filesystem — the #213 defect, twice 2026-09-01 08:27:55 +02:00

Opened #220 Launch command is typed into the pane and silently cut at 1024 bytes 2026-09-01 09:12:17 +02:00

Opened #222 ClaudeCodeLauncher writes the member's charter file into fleetd's own java.io.tmpdir — the #219 site-1 shape, third instance 2026-09-01 10:25:49 +02:00

Opened #224 worktreeRoot itself is never made group-traversable, so a restrictive umask breaks every member under memberHerdrSocket 2026-09-01 10:33:33 +02:00

Opened #225 Two memberHerdrSocket tests pass or fail depending on where the repo is checked out 2026-09-01 10:41:19 +02:00

Opened #226 A member that loses the architect slot race still runs on the architect charter while the gate treats it as a worker 2026-09-01 10:42:14 +02:00

Opened #227 A backend outage is invisible at fleet level: repeated backend errors are never correlated, never cool off a credential, and never reach the lead 2026-09-01 11:10:25 +02:00

Opened #232 autoCompactWindow is set by flag and never read back — the #175 shape in a second place 2026-09-02 13:00:53 +02:00

Opened #234 #175's model read-back fires a FALSE POSITIVE on any member spawned without a worktree — and the quarantine it announces never happens 2026-09-03 04:26:09 +02:00

Opened #241 Completion fallback can hand the lead back its own brief as the member's "report" 2026-09-03 05:42:40 +02:00

Opened #247 Seeding ~/.claude.json can still lose an external writer's change 2026-09-03 06:47:57 +02:00

Opened #248 Fleetd's composition root is untested: a feature can be silently unwired and every test stays green 2026-09-03 06:55:33 +02:00

Opened #249 fleet_list can report another session's agentSessionId, and fleet_spawn{resumeSessionId} will resume it 2026-09-03 06:59:22 +02:00

Opened #252 The REST surface is a supported operator fallback and is documented nowhere — 14 routes, 0 entries 2026-09-03 07:50:04 +02:00

Opened #257 fleet_list's free and the spawn gate now disagree by one on subscription profiles 2026-09-03 08:26:14 +02:00

Opened #258 Two test fixtures write to the operator's real ~/.claude.json on every run (116 dead entries accumulated) 2026-09-03 09:01:28 +02:00

Opened #266 memberCredentials.sshAuthSock: rename the values block/allow to omit/inherit — "block" names something fleetd does not do 2026-09-03 15:05:20 +02:00

Opened #267 The #175 model-mismatch check never runs for opencode spawns without a provisioned worktree — the majority of them 2026-09-03 15:10:34 +02:00

Opened #272 fleet_poll{target} drains another session's inbox behind a READ gate — authorization fails open 2026-09-04 04:52:41 +02:00

Opened #273 A malformed exhaustedPattern crashes startup unnamed — only errorPattern is validated at load 2026-09-04 04:55:51 +02:00

Opened #274 GitWorktrees.add() leaks the worktree and branch when a step after git worktree add throws 2026-09-04 04:56:02 +02:00

Opened #275 Investigate: abandon() skips a task in ASKING, so a torn-down member mid-fleet_ask may strand its ticket forever 2026-09-04 04:56:24 +02:00

Opened #276 #269 follow-up: the "allowed N of M" INFO line still claims to describe the member's pane 2026-09-04 05:00:37 +02:00

Opened #280 Follow-up to #275: a health-detected GONE member whose ask lapses may still strand its ticket 2026-09-04 05:19:53 +02:00

Opened #281 Pin the Authz.Action every handler chooses, so the next #272 fails a test instead of shipping 2026-09-04 05:34:46 +02:00

Opened #282 A second fleet_ask in the same resumed turn kills its own async ticket: answer() completes it with QUESTION 2026-09-04 05:38:40 +02:00

Opened #283 Two teardown leaks in SessionManager: an unguarded worktree removal, and a branch the spawn-failure catch forgets 2026-09-04 05:39:00 +02:00

Opened #284 A BACKEND_ERROR member holds its seat forever: counted as live, never reaped, never reclaimable 2026-09-04 05:39:29 +02:00

Opened #285 seedTrustDialog writes the trust seed to fleetd's own home when memberHerdrSocket is set, so the member never sees it 2026-09-04 05:39:50 +02:00

Opened #290 Restore a test for reapIdle's per-session guard, which #283 left uncovered 2026-09-04 05:55:08 +02:00

Opened #293 A failing tab.close during teardown leaks both the ZDOTDIR and the worktree 2026-09-04 06:27:28 +02:00

Opened #296 Two spawn-side exits leak a live pane, and the caller cannot clean up because it never learns the pane id 2026-09-04 07:00:14 +02:00

Opened #297 REST is the weaker door, and it is the door a lead falls back to when MCP drops 2026-09-04 07:02:57 +02:00

Opened #298 AmqpReplyInbox.release() drops an unacked reply that the broker still holds — a worker's report is lost silently 2026-09-04 07:05:57 +02:00

Opened #302 A REST reply with no content field silently becomes an empty reply, and the lead cannot tell it from a member that said nothing 2026-09-04 07:24:35 +02:00

Opened #304 POST /members and DELETE /members/{paneId} turn a herdr failure into a bare 500, and a stop that already succeeded can never report success 2026-09-04 07:43:27 +02:00

Opened #305 A worker connecting from 127.0.0.2 is resolved as the primary, and gains spawn/stop/send/drain 2026-09-04 07:58:08 +02:00

Opened #306 A worker that wedges in unknown during post-turn housekeeping is polled forever and can never be delivered to again 2026-09-04 08:06:16 +02:00

Opened #307 A worker's report is stranded when its fleet_ask timed out, and the lead is told the worker never replied 2026-09-04 08:08:37 +02:00

Opened #308 A worker spawned during the shutdown drain is never drained: its pane is left running and its worktree is never preserved 2026-09-04 08:11:12 +02:00

Opened #309 A timed-out git worktree add leaks the worktree it half-created: #274's cleanup does not cover the add itself 2026-09-04 08:11:44 +02:00

Opened #310 reapIdle can release a session that just became BUSY, contradicting its own documented invariant 2026-09-04 08:12:15 +02:00

Opened #315 The fixed placement policy ignores the retry loop's unreachable set, so an unqualified spawn retries the same dead profile and never tries the healthy one 2026-09-04 08:44:05 +02:00

Opened #316 The dirty-worktree check runs before the worker is stopped, so work written during teardown is deleted with no preserve and no snapshot 2026-09-04 08:48:06 +02:00

Opened #317 A failed peer-PID lookup promotes a worker to primary: the escalation PaneLocator's own javadoc names, through a trigger CB-161 did not close 2026-09-04 08:51:25 +02:00

Opened #318 A reply delivered while release() is running is stranded unacked forever: #298 closed "already held", not "arrives during release" 2026-09-04 08:53:28 +02:00

Opened #323 The reload classifier says "compares every component the launcher reads at spawn" and misses four keys, so those reloads report success and do nothing 2026-09-04 09:15:04 +02:00

Opened #324 answer() mutates a Task under sessionLocks while ask()'s timeout path mutates the same Task under no lock — finishAsyncTask can throw NPE on a null turnId 2026-09-04 09:26:17 +02:00

Opened #326 The top-level deferred-key list has the same drift as #323, and two keys are read both from the startup snapshot and live — no single classification is right for them 2026-09-04 09:33:58 +02:00

Opened #329 sendAsync's executor catch swallows every exception thrown after the future completes, and that is why a stranded async ticket is invisible 2026-09-04 10:00:04 +02:00

Opened #330 health: and coordinator: are split keys — add a fourth reload class that says so, then make the top-level list prove its own coverage 2026-09-04 10:02:12 +02:00

Opened #333 fleet: is a third split key, sitting in the coverage checker's own escape hatch — and SPLIT_KEYS membership does not prove any reporting code exists 2026-09-04 10:23:45 +02:00

Opened #334 MessageService: an async ticket is still stranded between clearAsyncQuestion and closeAsk 2026-09-04 10:33:46 +02:00

Opened #335 MessageService: three more places a thrown exception has nowhere to go 2026-09-04 10:35:17 +02:00

Opened #337 The deferred key set still has no reporting coverage — measured, a dropped comparison is invisible 2026-09-04 10:44:09 +02:00

Opened #338 A TIMED_OUT_QUEUED send leaves its message in the injector queue, and it is delivered later as a stale brief 2026-09-04 10:47:42 +02:00

Opened #339 A member's normal report that quotes "API Error:" is recorded as a real backend outage 2026-09-04 10:48:09 +02:00

Opened #340 classify() can call an active pane IDLE — measured real, trigger never seen (half A closed) 2026-09-04 10:48:45 +02:00

Opened #341 One flag guards two different memberCredentials WARNs, so a later leaking credential name is never reported 2026-09-04 10:51:10 +02:00

Opened #342 CompositePeerLauncher's single-daemon stop() shortcut can skip tab teardown, orphaning a worker tab 2026-09-04 10:51:36 +02:00

Opened #345 MessageService's use of Cancellation.DELIVERED is unpinned — the seam is tested, the caller is not 2026-09-04 11:01:04 +02:00

Opened #348 The same text-match-drives-a-cooldown shape exists for ExhaustionSink, where the penalty is 30x longer 2026-09-04 11:13:50 +02:00

Opened #352 CompositePeerLauncher.clearContext silently stops working for every peer that survives a restart 2026-09-04 11:41:35 +02:00

Opened #358 Two more records can silently drop a field the way FleetConfig could (MemberSession, FleetConfig.Profile) 2026-09-05 00:58:07 +02:00

Opened #359 Dead lead tabs accumulate and make lead-to-lead coordination permanently undeliverable 2026-09-05 02:40:58 +02:00

Opened #360 deploy/fleetd.service silently disables caller identity and the credential scrub 2026-09-05 02:50:14 +02:00

Opened #361 Lead-to-lead coordination has a send half with tools and a receive half without 2026-09-05 07:17:27 +02:00

Opened #362 The plugin shipped in CB-527 is invisible and has drifted — and it cannot deliver worker skills 2026-09-05 07:37:06 +02:00

Opened #365 Three more tool results claim "delivered" for something weaker than delivery 2026-09-05 07:49:59 +02:00

Opened #368 A lead's delegation binding outlives the lead, so reply nudges keep going to a dead terminal 2026-09-05 08:27:05 +02:00

Opened #369 GitWorktreesTest reads the machine's real git config, so it can pass or fail for reasons outside the repo 2026-09-05 08:34:33 +02:00

Opened #373 The hermetic env on production GitWorktrees instances is unpinned — stripping it stays green, poisoned or not 2026-09-06 15:32:56 +02:00

Opened #375 The idle-sleep guard is a no-op on Linux, so fleet01 still sleeps under a live member 2026-09-08 11:57:05 +02:00

Opened #376 A fast model trips the 2000ms crash floor: a real answer is reported as a failed turn 2026-09-08 23:06:12 +02:00

Opened #377 GITEA_HOST carries a scheme and a trailing slash, and every member builds URLs from it 2026-09-08 23:10:21 +02:00

Opened #381 Members cannot run shell commands: the classifier refuses every one, so they cannot build, test or open a PR (3 members, 2 profiles) 2026-09-09 02:29:11 +02:00

Opened #382 SpawnRequest has the arity trap's two halves, but not yet a colliding arity — CompositePeerLauncher:372 will drop the next component added 2026-09-09 02:42:01 +02:00

Opened #383 FleetHealthMonitor detects TURN_BOUNDARY_LOST but no API surface exposes it — a stalled member reads as healthy on every field a lead can see 2026-09-09 09:02:01 +02:00

Opened #384 "left no scrub report" has a third, benign cause it does not name — a group-shared ZDOTDIR cannot receive the receipt 2026-09-09 20:26:40 +02:00

Opened #385 A lead-coordination message can be delivered forever: ack() returns success when connection recovery cleared the held entry 2026-09-09 23:29:35 +02:00

Opened #386 Every fleetd timer freezes while the macOS host sleeps: System.nanoTime() stops, so the stall detector missed a member that was BUSY for 101 minutes 2026-09-10 01:26:13 +02:00

Opened #388 The credential scrub does not run in a shell that is neither login nor interactive — .zshenv is the only file zsh always reads, and it is the one file the scrub is not in 2026-09-10 01:45:28 +02:00

Opened #391 fleet_reply cannot answer a peer lead — the charter documents a path that does not exist 2026-09-10 02:41:27 +02:00

Opened #392 notifications.mode: webhook reports healthCoverage "full" and sends nothing — the knob relabels the absence of a sink 2026-09-10 02:51:38 +02:00

Opened #393 "skill seeding: N of M" is logged as success for opencode members, which never read .claude/skills/ 2026-09-10 02:51:59 +02:00

Opened #394 SECURITY: the credential scrub aborts silently at the first read-only parameter, leaving every later name unscrubbed 2026-09-10 02:57:08 +02:00

Opened #395 A profile with no exhaustedPattern has usage-limit detection silently OFF — 6 of 8 live profiles, including both Claude subscription ones 2026-09-10 03:00:11 +02:00

Opened #399 MessageServiceTest TTL test races the completedNanos stamp — passes on macOS, fails on Linux 2026-09-10 03:15:02 +02:00

Opened #400 SECURITY (receipt): the scrub reports a name as blanked when eval returned 0 without blanking it 2026-09-10 03:33:27 +02:00

Opened #404 exhaustionDetectionArmed reads the LIVE config while detection reads the STARTUP snapshot — after a reload it reports armed when detection is still off 2026-09-10 03:50:18 +02:00

Opened #407 Five log-only startup reporters in Fleetd.main have unpinned call sites — deleting any one ships a green build 2026-09-10 04:01:31 +02:00

Opened #408 Five places trust a command's exit code as proof of its effect and never read the value back — the #400 shape outside the scrub 2026-09-10 04:03:53 +02:00

Opened #409 The #399 completion-stamp race is verifiable deterministically — nowNanos is already injectable 2026-09-10 04:27:34 +02:00

Opened #410 liveStatus reported "working" for a member that did nothing for 76 minutes — the health snapshot has no progress signal 2026-09-10 04:32:22 +02:00

Opened #411 Warn at load when two profiles share a tokenEnv but quarantine under different credential ids 2026-09-10 04:35:16 +02:00

Opened #412 A daemon-side crash in the completion thread is silently misattributed to the worker 2026-09-10 04:38:21 +02:00

Opened #413 Building in the fleetd tree disarms the running daemon, and nothing warns at either end 2026-09-10 04:38:56 +02:00

Opened #415 The startup coverage line reports "off" for errorPattern, but legacy classification is still running 2026-09-10 04:40:02 +02:00

Opened #416 fleet_list advertises free capacity for a profile the spawn gate refuses — CapacitySource reads the live profile keySet 2026-09-10 04:57:47 +02:00

Opened #417 Sweep for the REVERSE config mismatch: a boot snapshot read where the key is hot 2026-09-10 05:00:41 +02:00

Opened #418 Second instance of the #399 shape: a test uses Phase.ASKING as a barrier for push-loop state published later 2026-09-10 05:03:27 +02:00

Opened #421 A lead can neither read nor safely keep its own held peer messages — the only drain is an injectable pane 2026-09-10 06:30:17 +02:00

Opened #422 Model gating units 2+3: enforce the allow-list at spawn, and turn one model off at runtime without editing profiles 2026-09-10 06:39:58 +02:00

Opened #424 Revoking an architect slot does not revoke it: MemberRegistry freezes fleet.architects, and the reload says it applied 2026-09-10 06:45:35 +02:00

Opened #425 fleet_profiles reports a frozen "default" profile while placement already moved to a new one 2026-09-10 06:46:21 +02:00

Opened #426 FleetHealthMonitor.coverage has no test at all, and it feeds fleet_list's healthCoverage field 2026-09-10 06:50:29 +02:00

Opened #427 A config key's hot/deferred class is a claim about every consumer, and nothing checks it that way 2026-09-10 06:54:03 +02:00

Opened #431 MemberRegistry: profileForSlot, nameForSlot and isSlot were made live with no test pinning any of them 2026-09-10 07:56:06 +02:00

Opened #435 maxLoad says it is excluded from "every automatic policy" — fixed, the default, ignores it 2026-09-10 08:26:46 +02:00

Opened #437 fleet_ack says "acknowledged <msgId>" for a held peer message it never touches 2026-09-10 08:53:36 +02:00

Opened #439 fleet_list hands every worker the coordinator row: peer coord-ids and 80-char previews of lead-to-lead bodies 2026-09-10 09:07:48 +02:00

Opened #440 coordinatorView reports heldDurable as a hardcoded true, so it cannot go false when durability breaks 2026-09-10 09:21:36 +02:00

Opened #441 Nothing warns that a profile has no usage-limit detection, so "off when the subscription limit is reached" silently covers only the profiles that opted in 2026-09-10 09:25:12 +02:00

Opened #442 Deleting any of the four startup report calls from Fleetd.main leaves the suite green 2026-09-10 09:29:37 +02:00

Opened #444 PlacementDecision's javadoc claims the place()-to-spawn() window is closed, but no test pins it — and PeerLauncher's default spawn(req, decision) reopens it 2026-09-10 09:35:37 +02:00

Opened #446 The model gate can be turned off at runtime but its usage-limit detector cannot be turned on at runtime 2026-09-10 11:40:19 +02:00

Opened #449 The herdr contract tests were left behind by the protocol-19 port, and nothing runs them 2026-09-10 11:52:38 +02:00

Opened #450 PeerLauncher's default spawn(req, decision) is still the #425 defect, and nothing tests it — make it abstract 2026-09-10 12:02:44 +02:00

Opened #453 PeerLauncher.place(role) and defaultProfileFor(role) are default methods that silently ignore the role 2026-09-10 12:18:15 +02:00

Opened #454 The herdr protocol number has no single home — 21 sites, no constant, and the fake and reality can disagree silently 2026-09-10 12:37:20 +02:00

Opened #455 Invariant 5 ("never drive the multiplexer directly, no socket") is unsatisfiable for a worker assigned to herdr code 2026-09-10 12:38:30 +02:00

Opened #458 Canonical invariant 5 states a mechanism where it means a purpose — restate it (blocked on #455) 2026-09-10 13:02:52 +02:00

Opened #459 Five {@link} targets in main do not exist, and nothing in CI would ever say so 2026-09-10 13:05:41 +02:00

Opened #460 The /mcp transport has no test: 57 endpoint tests all enter through REST, the door no agent uses 2026-09-10 13:08:33 +02:00

Opened #463 listFleet's compat overloads default callerIsPrimary to true, so the coordinator gate fails open 2026-09-10 13:43:12 +02:00

Opened #464 Nothing checks charter text against the tool surface the server registers 2026-09-10 13:43:26 +02:00

Opened #466 Exhaustion quarantine is a flat 30 minutes, so a weekly subscription limit is retried ~336 times 2026-09-10 13:55:17 +02:00

Opened #469 Charter text is still never checked against the live tool surface — one canonical tool-name set (follow-up to #464) 2026-09-10 14:13:11 +02:00

Opened #474 A charter naming an unregistered tool is refused at startup but accepted on reload 2026-09-10 15:11:17 +02:00

Opened #477 MessageServiceTest.anAlreadyCollectedTicketProducesNoNudge races the push loop's 300ms tick — reproduced on both hosts, under load 2026-09-10 15:48:57 +02:00

Opened #478 A directory in parityOverlay is reported as copied and arrives empty — Files.copy does not recurse 2026-09-10 15:52:38 +02:00

Opened #479 Exhaustion detection is armed on 2 of 8 profiles, and the default profile is not one of them 2026-09-10 23:21:03 +02:00

Opened #480 Lead session rollover: the lead asks for a handover, fleetd verifies it, clears the pane and boots the next lead 2026-09-11 01:09:38 +02:00

Opened #482 A context reset changes the peer's session id, and fleetd keeps reporting the dead one — so resumeSessionId would resume the conversation clearAfterTurn just discarded 2026-09-11 01:22:51 +02:00

Opened #486 LeadRollover's settle poll has no bound of its own, so a regression shows up as a CI hang instead of a red test 2026-09-11 02:20:12 +02:00

Opened #488 fleet.leaders.&lt;name&gt;.cwd is never validated — a relative value is silently accepted 2026-09-12 00:50:03 +02:00

Opened #489 #480 lead rollover: /clear and bootstrapText concatenate into one line — the roll never bootstraps 2026-09-12 02:18:36 +02:00

Opened #491 #480 a relative handoverPath lands in the LEAD'S repo, which is usually not the repo that ignores it 2026-09-12 03:45:49 +02:00

Opened #492 redeploy-fleetd.sh is launchd-only: on fleet01 it kills the daemon and leaves TWO running 2026-09-12 03:48:26 +02:00

Opened #493 redeploy-fleetd.sh builds into the LIVE jar path, so the shutdown drain can die on a class it never loaded (#413) 2026-09-12 03:50:54 +02:00

Opened #494 LeadRollover's failure logs print the CONFIGURED budget, not the measured wait — the exact thing that hid #489 2026-09-12 04:00:31 +02:00

Opened #497 A sentinel that conflates &#34;measured: no&#34; with &#34;could not measure&#34; — three instances, three subsystems 2026-09-12 04:12:52 +02:00

Opened #498 awaitHerdr has two return-false paths and the caller reports both as &#34;did not answer within 30s&#34; 2026-09-12 04:21:39 +02:00

Opened #500 probe-member-credentials.sh uses mapfile (bash 4+) with no set -e, so on bash 3.2 it silently reports an empty field list 2026-09-12 04:24:16 +02:00

Opened #501 Injector's readiness-grace warn prints the configured budget as if it were elapsed time — #494's defect, in the delivery loop 2026-09-12 04:44:37 +02:00

Opened #504 redeploy-fleetd.sh: four places where a failed command is reported as a clean result 2026-09-12 05:04:28 +02:00

Opened #505 A herdr error during the pane scan makes a worker's connection resolve as the primary — #317's escalation, through the door #317 did not close 2026-09-12 05:13:45 +02:00

Opened #506 Tests that stay green when the behaviour is absent: four sites, three mechanisms, one cheap discriminator 2026-09-12 05:27:23 +02:00

Opened #507 MessageServiceTest's coalescing tests sleep because the only observation available collects the ticket — the instrument is missing, not the test 2026-09-12 05:27:44 +02:00

Opened #509 #505 follow-up: the two-client completeness fold is unpinned, and legacyPrincipal can still re-open the escalation 2026-09-12 05:36:12 +02:00

Opened #511 #493 follow-up: the drain-gate abort message names a recovery that does not work, and jar_id()'s default is unpinned 2026-09-12 05:48:58 +02:00

Opened #512 redeploy-fleetd.sh says "no ERROR lines since restart" while blind to the exact failure #493 is about 2026-09-12 05:53:26 +02:00

Opened #513 MessageService's TIMED_OUT_QUEUED javadoc says the message is still queued; the code 12 lines of behaviour later cancels it 2026-09-12 05:56:51 +02:00

Opened #517 A source-text test pins what a message SAYS and never whether it is REACHED — the drain-gate abort branch can be disabled with the suite green 2026-09-12 06:01:07 +02:00

Opened #518 Nothing tests that FleetMcp uses the CallerResolver — forcing the legacy identity path leaves the whole suite green at 1696/0 2026-09-12 06:07:00 +02:00

Opened #519 probe-member-credentials.sh has no test harness at all, and its new arity message is off by one on an empty parse 2026-09-12 06:10:37 +02:00

Opened #521 The swap guard can be disabled with the suite green — a "successful" redeploy that never puts the new jar in place 2026-09-12 06:29:41 +02:00

Opened #525 A test pins the shared SessionManager logger to WARN and never restores it, so any later test asserting an INFO line silently sees nothing 2026-09-12 06:35:25 +02:00

Opened #528 "Extract the decision so the suite can call it" pins the decision and never the wiring — drain_gate_refusal's call site can be bypassed with the suite green 2026-09-12 07:01:05 +02:00

Opened #529 Tests pin shared logger levels and never restore them: 9 files, 19 pins, one proven cross-class collision — share SessionManagerTest's CapturedLog 2026-09-12 07:27:43 +02:00

Opened #530 The idle reaper destroys a member's pane, worktree, ticket and report and logs nothing at info — while the refs sweep beside it reports its count 2026-09-12 07:35:06 +02:00

Opened #535 FleetdLeadMailboxSelectionTest leaks three ListAppenders onto the shared Fleetd logger, and the appender-balance invariant catches it 2026-09-12 07:59:46 +02:00

Opened #537 CapturedLog.close() detaches the appender and no test proves it — the fix for #525/#529/#535 is itself unpinned 2026-09-12 08:25:35 +02:00

Opened #538 An Error in StatusPoller.loop or SessionReaper.loop kills the thread permanently and silently, and start() then refuses to restart it 2026-09-12 08:34:18 +02:00

Opened #544 A dead StatusPoller or SessionReaper can now be restarted, but nothing restarts it and nothing notices 2026-09-12 09:03:48 +02:00

Opened #545 redeploy-fleetd.sh cannot run on Linux at all: every mktemp -t NAME fails under GNU coreutils, and the script blames the systemd bus for it 2026-09-12 09:11:45 +02:00

Opened #546 Merging #543 made re-delivery reachable: an Error after Injector's send now loops and types the same brief again 2026-09-12 09:14:27 +02:00

Opened #550 shasum is macOS-only: on Linux redeploy-fleetd.sh reports an existing jar as "absent" with exit 0, and the shell suite dies at 127 looking green 2026-09-12 09:34:36 +02:00

Opened #551 Injector records the delivery AFTER the irreversible send, so a failure in the response window marks a delivered brief NOT_DELIVERED 2026-09-12 09:35:27 +02:00

Opened #552 redeploy-fleetd.sh exits non-zero after a SUCCESSFUL restart if the post-restart mktemp fails, reporting a working deployment as a failure 2026-09-12 09:39:13 +02:00

Opened #553 A throwable from any listener callback in onStatus skips the delivered-future completion, so a caller waits forever on a message that WAS delivered 2026-09-12 09:41:59 +02:00

Opened #555 redeploy-fleetd.sh: the 67-test suite covers the functions and barely touches the main flow 2026-09-12 10:07:26 +02:00

Opened #556 TurnListener implementations are the only thing maintaining the Injector's own invariant 2026-09-12 10:18:53 +02:00

Opened #561 Fleetd's TurnListener.onDelivered ordering is load-bearing and untested: swapping two lines makes a throw strand the caller for its full timeout 2026-09-12 11:01:31 +02:00

Opened #562 LoopWatchdog.health() is public and nothing reads it — surface it without breaking the two scripts that parse /healthz 2026-09-12 11:15:10 +02:00

Opened #563 A lead cannot ack its own held peer mail, so every lead-to-lead message it polls is delivered a second time and costs a whole lead turn 2026-09-12 11:29:57 +02:00

Opened #567 LeadMailbox.inspect leaks a probe channel if the close is removed, and 15 contract tests stay green while the line runs 3 times 2026-09-12 12:39:56 +02:00

Opened #568 The hunter skill has no MemberRole, so every sweep is spawned under a role whose agent file contradicts it 2026-09-12 12:40:27 +02:00

Opened #571 MessageService collapses the new ATTEMPTED state into TIMED_OUT_QUEUED, so a possibly-delivered message is reported as one that will never arrive 2026-09-12 12:49:15 +02:00

Opened #572 MessageService.answer() can lose its session-lock release and the whole suite stays green 2026-09-12 13:10:36 +02:00

Opened #575 The waiter cleanup in MessageService is maintained at three sites, and one of them is outside any finally 2026-09-12 13:31:12 +02:00

Opened #577 Sweep: find every invariant kept at N sites but asserted at fewer than N 2026-09-12 14:09:14 +02:00

Opened #578 MessageService.Outcome leaks .name() onto the wire; its sibling ReplyOutcome pins a wireName 400 lines up 2026-09-12 14:26:10 +02:00

Opened #581 CompletionResolver: 9 sites maintain the CAS-remove invariant, only 2 are asserted (from the #577 sweep) 2026-09-12 15:05:24 +02:00

Opened #582 AmqpReplyInbox / LeadMailbox: the pendingByMsgId half of the dual-map cleanup is unasserted at every error-path site (from the #577 sweep) 2026-09-12 15:05:46 +02:00

Opened #586 Sweep: enum.name().toLowerCase() is the house idiom for wire tokens at 15 sites across 5 files, and no test pins any of the long-form ones 2026-09-12 15:19:51 +02:00

Opened #587 Fleetd.java: sweep every constructor-arg wiring site and report which ones no test would notice being rewired 2026-09-12 15:57:01 +02:00

Opened #588 Every async ticket dies at a hardcoded 30 minutes, so any unit longer than that always reports failed while the member is still working — 41 measured at exactly 1800s 2026-09-12 16:40:37 +02:00

Opened #589 Fleetd.main's wiring has 1 behavioural test across 44 sites: pin the 11 whose failure silently turns off a control, with runtime tests not source-text ones 2026-09-12 16:53:08 +02:00

Opened #590 A broker unreachable at boot silently disables coordination for the process lifetime, and then reports itself as "not configured" 2026-09-14 08:32:30 +02:00

Opened #591 A lead-side rule has no delivery surface: fleet.charters reaches only spawned members, and it is per-daemon — so an operator policy aimed at "the fleets" cannot reach a single lead 2026-09-19 09:52:16 +02:00

Opened #592 An architect-settled decision leaves no trace the operator can find: there is no event for it, and #392 shows there is no sink to send one to 2026-09-19 09:52:29 +02:00

Opened #593 redeploy-fleetd.sh knows which supervisor it is talking to (#492) but not which one it is watching: the log source and the pid count are both still macOS-shaped, and on systemd they fail in opposite directions 2026-09-19 09:56:43 +02:00

Opened #594 LeadRollover refuses to touch a BLOCKED lead and documents why; LeadHeartbeatLoop:161 gates on injectable() and accepts one — the same question answered both ways in one codebase 2026-09-19 10:00:19 +02:00

Opened #595 Should a lead be rolled on a timer to pick up instruction changes? Measured: the roll is the expensive answer, it contradicts a stated invariant, and it has never been observed working end-to-end 2026-09-19 10:00:33 +02:00

Opened #603 redeploy-fleetd.sh reports "no process appeared" on a deploy that fully succeeded 2026-09-20 11:08:11 +02:00

Opened #604 Charter comparison across hosts: fleet_list drops charterBytes, and a digest cannot tell you what changed 2026-09-20 11:08:29 +02:00

Opened #608 Flaky: MessageServiceTest.anAlreadyCollectedTicketProducesNoNudge orders an async scheduler with Thread.sleep 2026-09-20 11:41:48 +02:00

Opened #609 Act on a HIGH lead context: tell the idle lead to hand over 2026-09-20 11:54:04 +02:00

Opened #612 Fleetd.main's injected wirings are unpinned: 16 call sites go inert with a fully green suite 2026-09-20 12:26:00 +02:00

Opened #613 A role with no pool and no charter starts anyway, and nothing at boot says so 2026-09-20 12:30:38 +02:00

Opened #615 A herdr throw during a lead roll leaves status(token) reporting IN_PROGRESS forever 2026-09-22 05:10:28 +02:00

Opened #618 Measured: CLAUDE_CODE_AUTO_COMPACT_WINDOW beats --autocompact, so fleetd.yaml's comment is backwards 2026-09-22 05:41:20 +02:00

Opened #621 contextNotice hardcodes "ask the operator" and ignores requireOperatorConfirm, so the knob cannot actually stop the asking 2026-09-22 06:01:58 +02:00

Opened #625 The subscription guard's call site is unpinned: deleting assertPrimaryClean from Fleetd.main leaves the whole suite green 2026-09-22 06:45:51 +02:00

Opened #629 FleetdAssembly's herdr boot wait bypasses ResourcePorts: every test with an unhealthy lead herdr pays 30 real seconds 2026-09-22 07:21:17 +02:00

Opened #630 The assembly's requireOperatorConfirm wiring is unpinned: dropping it silently reverts fleetd #621 with a fully green suite 2026-09-22 07:45:26 +02:00

10 Unresolved Conversations