Commit Graph
100 Commits
Author SHA1 Message Date
dave c66016394b huskies: merge 1063 2026-05-14 21:53:56 +00:00
dave 23c3301903 huskies: merge 1065 2026-05-14 21:48:09 +00:00
dave 8f666bd6b3 huskies: merge 1062 2026-05-14 20:36:51 +00:00
dave 5678f2a556 huskies: merge 1061 2026-05-14 20:12:51 +00:00
dave 54d9737428 huskies: merge 1060 2026-05-14 19:31:04 +00:00
dave b64eb69aee huskies: merge 1056 2026-05-14 19:14:03 +00:00
dave 6d53382f8c huskies: merge 1059 2026-05-14 19:09:17 +00:00
dave 7d7e02f7b0 huskies: merge 1058 2026-05-14 19:04:24 +00:00
dave 595777f366 huskies: merge 1054 2026-05-14 18:53:07 +00:00
dave 96e227d8d4 huskies: merge 1053 2026-05-14 18:40:37 +00:00
dave bb5abcd042 huskies: merge 811 2026-05-14 18:32:37 +00:00
dave b9709a6466 huskies: merge 1052 2026-05-14 18:11:57 +00:00
dave 977b954e98 huskies: merge 1051 2026-05-14 18:04:30 +00:00
dave 8f99fede34 huskies: merge 1050 2026-05-14 17:32:14 +00:00
dave 0d3c5579da huskies: merge 1047 2026-05-14 17:17:41 +00:00
dave 1f9f34ab58 huskies: merge 1038 2026-05-14 17:06:50 +00:00
dave 4553df5b21 huskies: merge 1045 2026-05-14 16:53:45 +00:00
dave 311883f45d huskies: merge 1039 2026-05-14 16:33:47 +00:00
dave 9e06fff8a8 huskies: merge 1046 2026-05-14 16:20:07 +00:00
dave 0b3a33a63c huskies: merge 1037 2026-05-14 15:54:17 +00:00
dave 6c05c63997 huskies: merge 1048 2026-05-14 15:28:19 +00:00
dave ee20e54d40 huskies: merge 1036 2026-05-14 15:13:25 +00:00
dave cfccc2e73c huskies: merge 1044 2026-05-14 14:54:13 +00:00
dave 960b4f4d1d huskies: merge 1032 2026-05-14 14:47:49 +00:00
dave bc99821274 huskies: merge 1031 2026-05-14 14:36:16 +00:00
dave 3d741acefb huskies: merge 1043 2026-05-14 14:31:09 +00:00
dave 5a3f94cae1 huskies: merge 1042 2026-05-14 14:25:15 +00:00
dave 8faf19f3ab huskies: merge 1034 2026-05-14 14:02:21 +00:00
dave 9501412598 huskies: merge 1030 2026-05-14 13:29:59 +00:00
dave f1c96595de huskies: merge 1035 2026-05-14 13:17:38 +00:00
dave c353c0a6be huskies: merge 1033 2026-05-14 13:08:43 +00:00
dave 72d79deec9 huskies: merge 1026 2026-05-14 13:00:51 +00:00
dave a80d0a497a huskies: merge 1029 2026-05-14 12:53:01 +00:00
dave 4fad283814 huskies: merge 1027 2026-05-14 11:39:14 +00:00
dave 3f2ded13a8 huskies: merge 1022 2026-05-14 11:29:15 +00:00
dave c64deca7c2 huskies: merge 1023 2026-05-14 11:24:05 +00:00
dave c7a7cb4281 huskies: merge 997 2026-05-14 11:06:27 +00:00
dave 309542cf2c huskies: merge 1018 2026-05-14 09:38:15 +00:00
dave e3f5875b8e huskies: merge 1019 2026-05-14 08:52:38 +00:00
dave ebf58ef224 huskies: merge 1008 2026-05-14 08:46:16 +00:00
dave 761b6934f1 huskies: merge 1007 2026-05-14 08:41:44 +00:00
dave 13ab97a615 huskies: merge 1010 2026-05-14 08:12:56 +00:00
dave 4520e0e6f9 huskies: merge 995 2026-05-14 07:55:40 +00:00
dave 52180bc402 huskies: merge 1017 2026-05-13 23:55:35 +00:00
dave 29e800da21 huskies: merge 1016 2026-05-13 23:51:07 +00:00
dave 5ed1438ab9 huskies: merge 1015 2026-05-13 23:39:17 +00:00
dave 69b207872a huskies: merge 1014 2026-05-13 23:25:10 +00:00
dave 8754c790b9 huskies: merge 1013 2026-05-13 23:12:18 +00:00
dave 4e007bb770 huskies: merge 1009 2026-05-13 22:55:05 +00:00
dave a5cd3a2152 huskies: merge 994 2026-05-13 22:38:51 +00:00
dave 1ee23e7bfe huskies: merge 996 2026-05-13 22:29:09 +00:00
dave cd9021fedf huskies: merge 1006 2026-05-13 21:41:39 +00:00
dave eb48ef19e7 huskies: merge 1011 2026-05-13 21:32:11 +00:00
dave bbdee1239b huskies: merge 998 2026-05-13 19:33:33 +00:00
dave caed894db9 huskies: merge 988 2026-05-13 17:28:52 +00:00
dave a078d3df7c huskies: merge 985 2026-05-13 16:52:19 +00:00
dave 580480094e huskies: merge 984 2026-05-13 16:47:51 +00:00
dave c3c9db3d8b huskies: merge 987 2026-05-13 16:30:31 +00:00
dave 430079ecbc huskies: merge 986 2026-05-13 16:01:51 +00:00
dave 91fbad568a huskies: merge 982 2026-05-13 15:34:41 +00:00
dave e6d051d016 huskies: merge 983 2026-05-13 15:29:59 +00:00
dave f268dca5bb huskies: merge 977 2026-05-13 15:11:37 +00:00
dave dcb43c465a huskies: merge 964 2026-05-13 14:56:08 +00:00
dave 14a39b6205 huskies: merge 980 2026-05-13 14:44:17 +00:00
dave e5d2465f66 huskies: merge 974 2026-05-13 14:26:42 +00:00
dave 7854fbd78a huskies: merge 979 2026-05-13 14:14:00 +00:00
dave 4b18c01835 huskies: merge 973 2026-05-13 14:08:05 +00:00
dave e9a7468d8a huskies: merge 981 2026-05-13 14:01:02 +00:00
dave 51aa649ce4 huskies: merge 978 2026-05-13 13:51:05 +00:00
dave 6fc6c9fcb2 huskies: merge 975 2026-05-13 13:45:10 +00:00
dave 5617da5c27 huskies: merge 972 2026-05-13 13:39:20 +00:00
dave 61815ebf5c huskies: merge 976 2026-05-13 13:31:19 +00:00
dave 77dc09668c huskies: merge 960 2026-05-13 13:24:15 +00:00
dave a47fbc4179 huskies: merge 971 2026-05-13 13:17:40 +00:00
dave 2a2c7ee625 huskies: merge 969 2026-05-13 12:59:34 +00:00
dave 9a6963ac04 huskies: merge 963 2026-05-13 12:53:03 +00:00
dave 93f774fcbb huskies: merge 967 2026-05-13 12:39:47 +00:00
dave 40ea100eae huskies: merge 970 2026-05-13 12:34:30 +00:00
dave 604fb55bd8 huskies: merge 959 2026-05-13 12:28:30 +00:00
dave c89a5c2da6 huskies: merge 966 2026-05-13 12:21:43 +00:00
daveandClaude Opus 4.7 2f1274ec7c script/check: also run source-map-check so doc-coverage failures surface during iteration
Two stories landed at the merge gate today (961, 962) with everything
else green, killed by a single missing `///` doc comment. The merge
gate runs source-map-check; script/check (and therefore the
mcp__huskies__run_check tool that coders use during iteration) did
not. So coders only saw the failure when the merge gate fired —
minutes after they thought they were done.

Chain source-map-check after cargo check so every iteration loop
catches a missing `///` instantly. AGENT.md already calls this out as
a required pre-commit step; making it part of the fast feedback loop
removes the "I forgot" failure mode.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:10:38 +00:00
daveandClaude Opus 4.7 3c9851d17d docs(AGENT.md): forceful "no exceptions" doc-comment rule
Two stories today (961, 962) passed every other gate and got bounced
at the merge step on a single missing `///` on a `pub mod` line.
Sonnet keeps treating the doc comment as optional when the rule says
"add doc comments to new modules and pub functions/structs/enums."

Promote the rule to its own loud section with no-exceptions wording
and a concrete reminder to run source-map-check before committing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:08:54 +00:00
dave 184c214c34 huskies: merge 962 2026-05-13 12:05:01 +00:00
dave 28338a8e8d huskies: merge 958 2026-05-13 11:52:51 +00:00
dave 8b53e20ca9 huskies: merge 961 2026-05-13 11:27:21 +00:00
dave 396a47d7c2 huskies: merge 957 2026-05-13 10:07:49 +00:00
dave 765d54fc4b huskies: merge 954 2026-05-13 09:35:51 +00:00
daveandClaude Opus 4.7 c228ae1640 fix: has_content_conflict_failure reads wrong CRDT key — auto-spawn mergemaster never fires
The function was calling `read_content(story_id)`, which returns the
story's *description* text (e.g. "Bug: Coder exits code 0 with
uncommitted work — force a commit-only respawn..."). It then scanned
that for "Merge conflict" / "CONFLICT (content):", which obviously
never matched, so the auto-spawn-mergemaster-on-content-conflict guard
in `pool/auto_assign/merge.rs` always saw `false` and skipped.

The actual gate output (where the merge runner stores the failure
message including conflict markers) lives at
`format!("{story_id}:gate_output")` — that's the key
`pipeline/advance/mod.rs:207` writes to. Read from there instead.

Witnessed: 954's merge hit a real `CONFLICT (content)` in
tests_regression.rs at 08:57:40, no mergemaster spawned, story stayed
in MergeFailure.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 09:03:25 +00:00
dave 6a015d6202 huskies: merge 953 2026-05-13 08:57:35 +00:00
dave 6bd11d41f9 huskies: merge 895 2026-05-13 08:52:59 +00:00
dave 4a8ed4348b huskies: merge 950 2026-05-13 08:46:22 +00:00
dave 7491eec257 fmt: collapse warm-resume unwrap_or_else closure per rustfmt
The 5-line spread of `.unwrap_or_else(|| { ... })` in spawn.rs (from
the bd517f28 + 65416476 warm-resume work) doesn't match rustfmt's
preference for the short form. Was blocking every merge gate since
the warm-resume fix landed.
2026-05-13 08:41:57 +00:00
daveandClaude Opus 4.7 65416476e3 warm-resume: drop "read PLAN.md" from the resume nudge
Follow-up to bd517f28. When --resume succeeds, claude-code restores the
full prior conversation — the agent already has its file reads, tool
results, and reasoning in context. Telling it to "read PLAN.md" forces
a redundant tool call to re-read a doc it wrote itself. PLAN.md is the
cold-start orientation doc (driven by AGENT.md); the resume -p prompt
should just be a continuation nudge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 08:28:01 +00:00
daveandClaude Opus 4.7 bd517f2857 fix(warm-resume): send non-empty -p prompt with --resume so watchdog
respawns can actually warm

claude-code's --resume <session_id> requires either:
  a) a deferred-tool marker in the resumed session (i.e. the prior
     session paused mid-tool-call), or
  b) a non-empty -p prompt to continue the conversation with.

Watchdog-killed sessions have neither: the kill is asynchronous and
leaves no deferred-tool marker, and our harness was passing an empty
-p (because `resume_context_owned` is None for the common respawn
case). claude-code then aborts with:

  "Error: No deferred tool marker found in the resumed session.
   Either the session was not deferred, the marker is stale (tool
   already ran), or it exceeds the tail-scan window. Provide a
   prompt to continue the conversation."

The harness sees an aborted CLI with no session, prunes the recorded
session_id, and respawns cold — paying the full prompt-cache miss for
EVERY respawn. The new session_store logging (commit 0b50a624) made
this 100% legible: every warm spawn we observed went `mode=warm` →
crash → prune → `mode=cold` within a couple of seconds.

Fix: when resuming with no failure-context to send, default the -p
prompt to a brief "continue from PLAN.md" line. claude-code now has a
valid continuation message and warm-resume should actually work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 08:27:02 +00:00
daveandClaude Opus 4.7 0b50a624b8 obs(session_store): log every record/lookup/remove for warm-resume diagnostics
Helps explain WHY each spawn goes warm vs cold. The existing
`spawn mode=warm|cold` log only shows the outcome at the spawn point —
to count where warmth is being lost, we need to see:
  - when a session_id is recorded (and for which key),
  - what every lookup returns (key + Some/None),
  - when remove_sessions_for_story prunes (which is currently the only
    explicit cold-induction path beyond "first ever spawn").

After this lands a grep of "session_store" in the logs gives the full
warm-resume health picture: which (story,agent,model) triples have a
recorded session, which lookups are hitting it, and which prunes are
costing us a warm respawn.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 08:12:42 +00:00
dave 6e76b6a063 huskies: merge 930 2026-05-13 08:06:37 +00:00
dave a7840ea4b0 huskies: merge 946 2026-05-13 08:00:49 +00:00
dave 4a0fbcaa95 huskies: merge 949 2026-05-13 07:14:50 +00:00
daveandClaude Opus 4.7 d87722f6c8 chore: untrack PLAN.md from master (stopgap — see bug for root-cause fix)
PLAN.md is supposed to be a per-worktree planning file written by coder
agents and gitignored at the project root (.gitignore line 21, added by
952). But two recent merges shipped it anyway (945, 919) because the
squash-merge pipeline doesn't filter gitignored paths from the feature
branch diff — and once tracked, .gitignore stops protecting it.

This commit just removes it from master's tree. The structural fix
(squash-merge respects root .gitignore) is filed as a separate bug. If
an in-flight feature branch commits PLAN.md before that lands, this
file will be back on master at the next merge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 06:43:52 +00:00
dave 09a8edc0a1 huskies: merge 919 2026-05-13 06:27:10 +00:00