Commit Graph
100 Commits
Author SHA1 Message Date
Dave 3087297b88 story-kit: merge 91_bug_permissions_dialog_never_triggers_in_web_ui 2026-02-23 21:38:45 +00:00
Dave 02a1edc3de story-kit: accept 102_story_test_coverage_http_model_rs_to_80 2026-02-23 21:38:33 +00:00
Dave 7d18f93885 story-kit: start 104_story_test_coverage_io_search_rs_to_95 2026-02-23 21:37:55 +00:00
Dave 97df5845f0 story-kit: start 103_story_test_coverage_http_project_rs_to_80 2026-02-23 21:37:33 +00:00
Dave e21c982d8b story-kit: merge 102_story_test_coverage_http_model_rs_to_80 2026-02-23 21:37:20 +00:00
Dave 52b9bc2994 story-kit: accept 95_bug_pipeline_auto_restart_has_no_retry_limit_causing_infinite_loop 2026-02-23 21:37:05 +00:00
Dave 2408d41a33 story-kit: queue 91_bug_permissions_dialog_never_triggers_in_web_ui for merge 2026-02-23 21:35:37 +00:00
Dave f234def26a story-kit: start 101_story_test_coverage_http_chat_rs_to_80 2026-02-23 21:35:34 +00:00
Dave fcf7984a89 story-kit: queue 100_story_test_coverage_http_context_rs_to_100 for QA 2026-02-23 21:34:59 +00:00
Dave 0bb13d2b67 story-kit: queue 102_story_test_coverage_http_model_rs_to_80 for QA 2026-02-23 21:29:22 +00:00
Dave a4e1048bc8 story-kit: queue 95_bug_pipeline_auto_restart_has_no_retry_limit_causing_infinite_loop for merge 2026-02-23 21:29:18 +00:00
Dave dad0a76892 story-kit: queue 91_bug_permissions_dialog_never_triggers_in_web_ui for QA 2026-02-23 21:28:09 +00:00
Dave 6b1a3c1ca3 story-kit: start 102_story_test_coverage_http_model_rs_to_80 2026-02-23 21:26:13 +00:00
Dave 94ac7639ad Merge branch 'feature/story-85_story_agent_lozenges_move_between_roster_and_work_items_instead_of_duplicating'
# Conflicts:
#	.coverage_baseline
2026-02-23 21:24:44 +00:00
Dave 5b7f65aa2c story-kit: start 91_bug_permissions_dialog_never_triggers_in_web_ui 2026-02-23 21:16:33 +00:00
Dave 1c2ee3c1bd story-kit: create 91_bug_permissions_dialog_never_triggers_in_web_ui 2026-02-23 21:16:00 +00:00
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
DaveandClaude Sonnet 4.6 4740a24032 fix: add text reporter to vitest so coverage script can parse frontend coverage
The coverage script parses "All files" from vitest text table output, but
vitest was only configured with json-summary reporter. This caused frontend
coverage to show as 0%, pulling overall coverage below threshold.

Frontend line coverage is 68.4%, making overall coverage 66.4% vs 64.60% threshold.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 21:11:51 +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 a18d4350ae chore: add .vite/ Vitest cache to .gitignore 2026-02-23 20:19:11 +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 Sonnet 4.6 6c1f8555e8 feat(story-85): agent lozenges move between roster and work items
- Add `hiddenRosterAgents: ReadonlySet<string>` to LozengeFlyContext:
  - Derived from pipeline: any agent currently assigned to a work item
  - `flyingOutAgents` state keeps badge hidden for 500 ms during the
    fly-out animation so the returning clone lands before the badge reappears
  - Union of both sets exposed as `hiddenRosterAgents` in context
- Update AgentPanel: wrap each RosterBadge in a collapsing div
  controlled by `hiddenRosterAgents`. The div transitions max-width
  0→300px / opacity 0→1 so the roster gap closes/opens smoothly.
- Add tests covering:
  - `hiddenRosterAgents` is empty when no agents are assigned
  - Badge hidden immediately when agent appears in pipeline
  - Badge hidden during fly-out (0–499 ms) and visible after (≥500 ms)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 19:52:23 +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