Commit Graph
100 Commits
Author SHA1 Message Date
Dave f71677256a story-kit: create 113_story_add_test_coverage_for_usepathcompletion_hook 2026-02-23 21:13:52 +00:00
Dave 83b91aace3 story-kit: create 112_story_add_test_coverage_for_app_tsx 2026-02-23 21:13:46 +00:00
Dave 69b058e257 story-kit: create 111_story_add_test_coverage_for_api_agents_ts 2026-02-23 21:13:41 +00:00
Dave d321294cc9 story-kit: create 110_story_add_test_coverage_for_api_settings_ts 2026-02-23 21:13:36 +00:00
Dave 5d6b269ed4 story-kit: create 109_story_add_test_coverage_for_lozengeflycontext_selectionscreen_and_chatheader_components 2026-02-23 21:13:30 +00:00
Dave c3b9b29fa9 story-kit: accept 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 21:13:22 +00:00
Dave ee2cce0b26 story-kit: queue 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating for merge 2026-02-23 21:12:50 +00:00
Dave b5cec1942b story-kit: create 108_story_test_coverage_http_agents_rs_to_70 2026-02-23 21:11:10 +00:00
Dave e284483cbb story-kit: create 107_story_test_coverage_http_assets_rs_to_85 2026-02-23 21:11:07 +00:00
Dave a4ce32ca88 story-kit: create 106_story_test_coverage_http_settings_rs_to_80 2026-02-23 21:11:05 +00:00
Dave ecab2ef916 story-kit: create 105_story_test_coverage_io_shell_rs_to_95 2026-02-23 21:11:02 +00:00
Dave 4a206f3294 story-kit: create 104_story_test_coverage_io_search_rs_to_95 2026-02-23 21:11:00 +00:00
Dave 8502bdf80c story-kit: create 103_story_test_coverage_http_project_rs_to_80 2026-02-23 21:10:54 +00:00
Dave c09f91ff27 story-kit: create 102_story_test_coverage_http_model_rs_to_80 2026-02-23 21:10:52 +00:00
Dave 76d72a66a1 story-kit: create 101_story_test_coverage_http_chat_rs_to_80 2026-02-23 21:10:49 +00:00
Dave 9b8f9d788b story-kit: create 100_story_test_coverage_http_context_rs_to_100 2026-02-23 21:10:47 +00:00
Dave 73fbd11689 story-kit: create 99_story_test_coverage_http_health_rs_to_100 2026-02-23 21:10:45 +00:00
Dave 6498f9d994 story-kit: start 98_story_expand_work_item_to_full_screen_detail_view 2026-02-23 21:02:03 +00:00
Dave 25802b8a28 story-kit: create 98_story_expand_work_item_to_full_screen_detail_view 2026-02-23 21:01:27 +00:00
Dave 058ea8f398 story-kit: create 98_story_expand_work_item_to_full_screen_detail_view 2026-02-23 21:00:39 +00:00
Dave 6d87355577 Merge branch 'feature/story-97_bug_agent_pool_allows_multiple_instances_of_the_same_agent_to_run_concurrently' 2026-02-23 20:53:54 +00:00
DaveandClaude Opus 4.6 a0f317292c story-kit: merge 93_story_expose_server_logs_to_agents_via_mcp
Adds log_buffer ring buffer and slog! macro for in-memory server log
capture, plus get_server_logs MCP tool for agents to read recent logs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:53:37 +00:00
Dave bed46fea1b story-kit: accept 96_story_reset_agent_lozenge_to_idle_state_when_returning_to_roster 2026-02-23 20:52:06 +00:00
DaveandClaude Sonnet 4.6 b09b6ce4f1 fix(agents): enforce single-instance concurrency per agent name
The agent pool allowed the same agent (e.g. "qa") to run concurrently
on multiple stories because start_agent() only checked whether that
story+agent combo was already active. It did not check whether the
agent was busy on a different story.

Two concurrent QA runs each spawn cargo clippy + cargo test + vitest,
causing extreme CPU load (load average >33 on M1 Mac).

Fix: before registering a new agent as Pending, scan all active entries
for any Running or Pending entry with the same agent_name. If one is
found, return an error explaining that the story will be picked up when
the agent becomes available.

The existing auto_assign_available_work() mechanism already scans
pipeline directories (3_qa/, 4_merge/, etc.) for unassigned stories
and uses find_free_agent_for_stage() — which respects single-instance
limits — to assign work when an agent slot opens up. So the queuing
behaviour is naturally provided: the story stays in its directory,
and auto-assign picks it up when the previous run completes.

Adds two regression tests:
- start_agent_rejects_when_same_agent_already_running_on_another_story
- start_agent_allows_new_story_when_previous_run_is_completed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 20:46:51 +00:00
Dave 7f18542c09 story-kit: queue 93_story_expose_server_logs_to_agents_via_mcp for merge 2026-02-23 20:42:26 +00:00
Dave 0de1a3f113 story-kit: queue 89_story_persistent_per_session_agent_logs for merge 2026-02-23 20:42:23 +00:00
Dave 1366f64c3d story-kit: queue 89_story_persistent_per_session_agent_logs for QA 2026-02-23 20:40:24 +00:00
Dave b46a72730c story-kit: queue 93_story_expose_server_logs_to_agents_via_mcp for QA 2026-02-23 20:40:13 +00:00
DaveandClaude Sonnet 4.6 c1ff530e50 fix: allow e2e tests to reuse existing vite server on port conflict
Set reuseExistingServer:true in playwright config so acceptance gates
don't fail when port 41700 is already occupied by a prior test run.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 20:39:57 +00:00
Dave ec0f48656b story-kit: start 97_bug_agent_pool_allows_multiple_instances_of_the_same_agent_to_run_concurrently 2026-02-23 20:39:47 +00:00
Dave 64e76f4bb9 story-kit: accept 94_bug_stale_agent_state_persists_after_server_restart 2026-02-23 20:38:37 +00:00
DaveandClaude Sonnet 4.6 8c6bd4cf74 feat(story-93): expose server logs to agents via get_server_logs MCP tool
- Add log_buffer module: bounded 1000-line ring buffer with push/get_recent API
- Add slog! macro: drop-in for eprintln! that also captures to ring buffer
- Replace all eprintln! calls across agents, watcher, search, chat, worktree, claude_code with slog!
- Add get_server_logs MCP tool: accepts count (1-500) and optional filter params
- 5 unit tests for log_buffer covering push/retrieve, eviction, filtering, count limits, empty buffer
- 262 tests passing, clippy clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 20:38:19 +00:00
Dave cd902ff219 story-kit: merge 94_bug_stale_agent_state_persists_after_server_restart 2026-02-23 20:38:17 +00:00
Dave 39dbace8bf story-kit: create 97_bug_agent_pool_allows_multiple_instances_of_the_same_agent_to_run_concurrently 2026-02-23 20:38:16 +00:00
Dave dc1e441a86 story-kit: queue 94_bug_stale_agent_state_persists_after_server_restart for merge 2026-02-23 20:38:04 +00:00
Dave 1a70d4303d story-kit: queue 94_bug_stale_agent_state_persists_after_server_restart for QA 2026-02-23 20:36:52 +00:00
Dave c291613887 story-kit: start 96_story_reset_agent_lozenge_to_idle_state_when_returning_to_roster 2026-02-23 20:34:54 +00:00
Dave 7925fd8fbc story-kit: queue 95_bug_pipeline_auto_restart_has_no_retry_limit_causing_infinite_loop for QA 2026-02-23 20:33:36 +00:00
Dave d371960d05 story-kit: create 96_story_reset_agent_lozenge_to_idle_state_when_returning_to_roster 2026-02-23 20:33:02 +00:00
Dave f0ec507cc4 story-kit: start 93_story_expose_server_logs_to_agents_via_mcp 2026-02-23 20:31:01 +00:00
Dave 3d480e7c22 story-kit: accept 78_story_create_spike_mcp_tool 2026-02-23 20:27:28 +00:00
Dave a25553f1bc story-kit: merge 78_story_create_spike_mcp_tool 2026-02-23 20:27:09 +00:00
Dave 2b3063ace2 story-kit: queue 78_story_create_spike_mcp_tool for merge 2026-02-23 20:26:55 +00:00
Dave 0c9883fe10 story-kit: start 89_story_persistent_per_session_agent_logs 2026-02-23 20:26:24 +00:00
Dave 421c702aad story-kit: queue 78_story_create_spike_mcp_tool for QA 2026-02-23 20:25:47 +00:00
Dave c4f92ee7db story-kit: start 94_bug_stale_agent_state_persists_after_server_restart 2026-02-23 20:24:15 +00:00
Dave 64e76b21c3 story-kit: start 95_bug_pipeline_auto_restart_has_no_retry_limit_causing_infinite_loop 2026-02-23 20:23:45 +00:00
Dave 22b862023b story-kit: start 78_story_create_spike_mcp_tool 2026-02-23 20:21:35 +00:00
Dave aa2149e506 story-kit: create 95_bug_pipeline_auto_restart_has_no_retry_limit_causing_infinite_loop 2026-02-23 20:15:28 +00:00
Dave 8d58e3999d story-kit: create 94_bug_stale_agent_state_persists_after_server_restart 2026-02-23 20:04:46 +00:00
Dave 06586a5b70 story-kit: queue 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating for QA 2026-02-23 20:02:47 +00:00
Dave 9da25a149d story-kit: create 93_story_expose_server_logs_to_agents_via_mcp 2026-02-23 19:59:07 +00:00
Dave 1a7948b15a story-kit: queue 91_bug_permissions_dialog_never_triggers_in_web_ui for QA 2026-02-23 19:54:05 +00:00
Dave 41fce3322c story-kit: start 91_bug_permissions_dialog_never_triggers_in_web_ui 2026-02-23 19:52:53 +00:00
Dave 7f139917b4 story-kit: create 91_bug_permissions_dialog_never_triggers_in_web_ui 2026-02-23 19:52:26 +00:00
DaveandClaude Opus 4.6 d1d7ce47ac Switch all Sonnet agents from 4.6 to 4.5 for speed
Sonnet 4.6 is too slow for small stories — agents burn through turns
without completing. Reverting coders, QA, and mergemaster to Sonnet 4.5.
Supervisor and coder-opus remain on Opus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:50:10 +00:00
Dave 02a617eee3 story-kit: queue 93_bug_agent_session_id_is_null_while_running for QA 2026-02-23 19:49:04 +00:00
Dave 306514e6d2 story-kit: start 93_bug_agent_session_id_is_null_while_running 2026-02-23 19:43:18 +00:00
Dave 0aaefc34c2 story-kit: create 93_bug_agent_session_id_is_null_while_running 2026-02-23 19:39:37 +00:00
Dave 03f243b670 story-kit: create 92_spike_stop_auto_committing_intermediate_pipeline_moves 2026-02-23 19:37:28 +00:00
Dave 63cfd5818c story-kit: start 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 19:27:08 +00:00
Dave a91d663894 story-kit: create 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 19:26:54 +00:00
DaveandClaude Opus 4.6 04e7a1e854 Remove invalid --directory flag that broke agent spawning
The --directory flag does not exist in Claude Code CLI. It was added in
c169cfc but caused every agent spawn to exit immediately with "unknown
option", resulting in Session: None errors. The process cwd (set via
cmd.cwd()) already correctly pins agents to the worktree directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:26:37 +00:00
Dave 42ad712a74 story-kit: queue 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating for QA 2026-02-23 19:19:44 +00:00
Dave c70399a39b story-kit: start 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 19:13:35 +00:00
Dave 8b9d77e2f2 story-kit: remove 92_story_test_story_creation_without_test_plan 2026-02-23 19:13:11 +00:00
Dave 23043dbd29 story-kit: create 92_story_test_story_creation_without_test_plan 2026-02-23 19:12:52 +00:00
DaveandClaude Opus 4.6 31037f5bf5 Remove test_plan gate from the codebase
The test_plan field was a gate from the old interactive web UI workflow
where a human would approve a test plan before the LLM could write code.
With autonomous coder agents, this gate is dead weight — coders sometimes
obey the README's "wait for approval" instruction and produce no code.

Removes: TestPlanStatus enum, ensure_test_plan_approved checks in fs/shell,
set_test_plan MCP tool + handler, test_plan from story/bug front matter
creation, test_plan validation in validate_story_dirs, and all related tests.
Updates README to remove Step 2 (Test Planning) and renumber steps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:12:05 +00:00
Dave cc2511b792 story-kit: create 35_story_agent_security_and_sandboxing 2026-02-23 19:08:42 +00:00
Dave e13338b212 story-kit: create 35_story_agent_security_and_sandboxing 2026-02-23 19:08:38 +00:00
Dave ed2829b641 story-kit: accept 86_story_show_live_activity_status_instead_of_static_thinking_indicator_in_chat 2026-02-23 19:07:47 +00:00
Dave 520c1a0990 story-kit: create 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 18:55:54 +00:00
DaveandClaude Opus 4.6 1539e52b19 Inject story content into agent prompts so coders know what to build
The worktree doesn't have .story_kit/work/ so agents had no access to
the story requirements. Read the story file from the project root and
prepend it to the prompt. Without this, coders would start, read
CLAUDE.md, have nothing to implement, and exit with no code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:50:41 +00:00
Dave 5374ee316e story-kit: accept 89_story_persistent_per_session_agent_logs 2026-02-23 18:47:46 +00:00
Dave 8729175ba1 story-kit: queue 89_story_persistent_per_session_agent_logs for merge 2026-02-23 18:47:34 +00:00
Dave 70d5766aa1 story-kit: accept 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 18:47:25 +00:00
Dave b03b17724a story-kit: queue 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating for merge 2026-02-23 18:47:04 +00:00
Dave 829e700bb2 story-kit: queue 89_story_persistent_per_session_agent_logs for QA 2026-02-23 18:46:41 +00:00
Dave 3af7a5d19e story-kit: queue 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating for QA 2026-02-23 18:46:03 +00:00
DaveandClaude Opus 4.6 c169cfc9fa Pass --directory flag to Claude Code agents to prevent worktree escape
Claude Code resolves its project root by walking up from cwd looking
for .git. In worktrees, .git is a file pointing back to the main
checkout, so Claude Code would resolve the main repo as its project
and write files there instead of in the worktree. Adding --directory
explicitly pins it to the worktree path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:43:23 +00:00
Dave d8e35dbbf8 story-kit: accept 86_story_show_live_activity_status_instead_of_static_thinking_indicator_in_chat 2026-02-23 18:38:30 +00:00
Dave af1625a132 story-kit: merge 86_story_show_live_activity_status_instead_of_static_thinking_indicator_in_chat 2026-02-23 18:38:15 +00:00
Dave da8ded460e story-kit: queue 86_story_show_live_activity_status_instead_of_static_thinking_indicator_in_chat for merge 2026-02-23 18:38:01 +00:00
Dave 201740d4d2 story-kit: create 91_bug_permissions_dialog_never_triggers_in_web_ui 2026-02-23 18:36:54 +00:00
Dave c37a86d1fd story-kit: queue 86_story_show_live_activity_status_instead_of_static_thinking_indicator_in_chat for QA 2026-02-23 18:34:51 +00:00
Dave cde607f455 story-kit: create 90_story_fetch_real_context_window_size_from_anthropic_models_api 2026-02-23 18:32:56 +00:00
Dave f67f720ec3 story-kit: start 86_story_show_live_activity_status_instead_of_static_thinking_indicator_in_chat 2026-02-23 18:26:09 +00:00
Dave f1c600a9e6 story-kit: start 89_story_persistent_per_session_agent_logs 2026-02-23 18:25:41 +00:00
Dave ef427a28b9 story-kit: start 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 18:25:09 +00:00
Dave eb0b1b0cd6 story-kit: accept 88_story_auto_assign_agents_to_available_work_on_server_startup 2026-02-23 18:23:19 +00:00
Dave 4079188084 story-kit: accept 87_story_update_agent_lozenge_colour_scheme_across_panels 2026-02-23 18:23:15 +00:00
Dave ac22e9a882 story-kit: merge 87_story_update_agent_lozenge_colour_scheme_across_panels 2026-02-23 18:23:01 +00:00
Dave 4162eb1d1b story-kit: queue 87_story_update_agent_lozenge_colour_scheme_across_panels for merge 2026-02-23 18:22:46 +00:00
Dave 8fb6d09aa0 story-kit: start 88_story_auto_assign_agents_to_available_work_on_server_startup 2026-02-23 18:22:23 +00:00
Dave 8e12156e1b story-kit: accept 88_story_auto_assign_agents_to_available_work_on_server_startup 2026-02-23 18:20:45 +00:00
Dave 225073649b story-kit: start 88_story_auto_assign_agents_to_available_work_on_server_startup 2026-02-23 18:20:24 +00:00
Dave 8b5704c8f6 story-kit: queue 88_story_auto_assign_agents_to_available_work_on_server_startup for merge 2026-02-23 18:20:11 +00:00
Dave 2e0f516530 story-kit: queue 88_story_auto_assign_agents_to_available_work_on_server_startup for QA 2026-02-23 18:17:25 +00:00
Dave 393cd567c2 story-kit: create 85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating 2026-02-23 18:12:33 +00:00
Dave 7146f2a70c story-kit: queue 87_story_update_agent_lozenge_colour_scheme_across_panels for QA 2026-02-23 18:12:29 +00:00