Commit Graph

64 Commits

Author SHA1 Message Date
Dave
8f0624f012 story-kit: merge 216_story_merge_quality_gates_should_use_project_toml_components_and_script_test_instead_of_hardcoded_frontend_pnpm 2026-02-26 19:33:21 +00:00
Dave
2148531a46 fix: auto-assign after merge, persistent server logs, remove duplicate pnpm install
- Call auto_assign_available_work at end of merge_agent_work so the next
  story gets picked up without waiting for the PTY exit handler
- Add persistent file logging to .story_kit/logs/server.log so server
  logs survive restarts
- Remove duplicate pnpm install block in run_squash_merge

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 18:24:27 +00:00
Dave
774a731042 bug-210: prevent pipeline from moving story to done when mergemaster reports failure
The pipeline advancement logic was ignoring report_merge_failure and
blindly trusting the server-owned completion gates_passed result. Now
report_merge_failure sets a flag on the agent entry that the pipeline
checks before advancing — stories stay in 4_merge/ when merge fails.

Squash merge of feature/story-210

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 16:12:23 +00:00
Dave
17fd3b2dc2 story-kit: merge 208_bug_project_scaffold_does_not_write_mcp_json_to_project_root 2026-02-26 14:59:19 +00:00
Dave
81065a3ada fix: replace fast-forward with cherry-pick in mergemaster squash-merge
The mergemaster pipeline used git merge --ff-only to apply the squash
commit from a merge-queue branch onto master. This raced with the
filesystem watcher which auto-commits pipeline file moves to master,
causing the fast-forward to fail. The mergemaster agent would then
improvise by manually moving stories to done without the code merge.

- Replace --ff-only with cherry-pick so concurrent watcher commits
  don't block the merge
- Add report_merge_failure MCP tool for explicit failure handling
- Update mergemaster prompt to forbid manual file moves
- Fix cleanup_merge_workspace to handle stale directories

Squash merge of feature/story-205

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 14:16:35 +00:00
Dave
819b72523f story-kit: merge 203_story_move_story_to_current_before_checking_agent_availability_in_start_agent 2026-02-26 12:41:12 +00:00
Dave
411653ab15 story-kit: merge 190_story_auto_select_available_agent_for_stage_in_start_agent 2026-02-25 16:17:38 +00:00
Dave
ebcd627a45 Fix: remove agent from pool immediately on completion and add Matrix bot user allowlist 2026-02-25 14:59:20 +00:00
Dave
d70285adda story-kit: merge 176_bug_stories_moved_to_current_get_supervisor_instead_of_coder 2026-02-25 09:30:15 +00:00
Dave
51fad34a6a story-kit: merge 173_bug_pipeline_board_lozenges_dont_update_on_agent_state_changes 2026-02-24 23:57:07 +00:00
Dave
dc631d1933 story-kit: merge 149_bug_web_ui_does_not_update_when_agents_are_started_or_stopped 2026-02-24 23:09:13 +00:00
Dave
2b5766aaf3 story-kit: merge 167_bug_thinking_trace_height_constraint_not_working_in_web_ui 2026-02-24 19:35:06 +00:00
Dave
7b3853bad0 story-kit: merge 165_bug_pipeline_log_message_says_archived_instead_of_done 2026-02-24 18:38:13 +00:00
Dave
464b1e5530 story-kit: merge 160_story_constrain_thinking_trace_height_in_agent_stream_ui 2026-02-24 18:03:08 +00:00
Dave
e6662c8f8e story-kit: merge 159_bug_server_restart_leaves_orphaned_claude_code_pty_processes_running 2026-02-24 17:56:40 +00:00
Dave
fb91096b09 story-kit: merge 161_bug_auto_assign_only_triggers_on_agent_completion_not_on_failure_or_periodically 2026-02-24 17:28:45 +00:00
Dave
aef022c74c story-kit: merge 151_story_split_archived_into_done_and_archived_with_time_based_promotion
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 17:01:57 +00:00
Dave
68af8c5ba9 story-kit: merge 157_story_make_start_agent_non_blocking_by_deferring_worktree_creation
Make start_agent non-blocking by deferring worktree creation. The agent
spawn now returns immediately while worktree setup happens asynchronously,
improving responsiveness of the start_agent MCP call.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:50:56 +00:00
Dave
a6d084be31 story-kit: create 155_story_queue_messages_while_agent_is_busy 2026-02-24 15:55:36 +00:00
Dave
774548c04c story-kit: merge 153_bug_auto_assign_broken_after_stage_field_was_added_to_agent_config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:50:34 +00:00
Dave
834a0361a1 story-kit: merge 142_bug_quality_gates_run_after_fast_forward_to_master_instead_of_before 2026-02-24 13:56:11 +00:00
Dave
73614fe5e8 story-kit: merge 141_story_improve_server_logging_with_timestamps_and_error_visibility 2026-02-24 13:48:25 +00:00
Dave
c8efe2059f Fix merge conflict resolution artifacts in agents.rs
- Add missing closing brace for spawn_watchdog function
- Remove leftover <<<<<<< HEAD conflict marker in test module
- Restore conflict marker test data that was incorrectly stripped
- Add missing completed_at field in inject_test_agent_with_handle

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:24:39 +00:00
Dave
518d5335d2 story-kit: merge 133_story_clean_up_agent_state_on_story_archive_and_add_ttl_for_completed_entries 2026-02-24 13:22:15 +00:00
Dave
580bac22fa Fix unclosed delimiter from merge conflict resolution in agents.rs
Remove leftover conflict markers and add missing closing brace for
watchdog_detects_orphaned_running_agent test function.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:22:11 +00:00
Dave
6170a7d984 story-kit: merge 133_story_clean_up_agent_state_on_story_archive_and_add_ttl_for_completed_entries 2026-02-24 13:20:59 +00:00
Dave
560c731869 story-kit: merge 134_story_add_process_health_monitoring_and_timeout_to_agent_pty_sessions 2026-02-24 13:13:16 +00:00
Dave
c5ddd15273 story-kit: merge 132_story_fix_toctou_race_in_agent_check_and_insert 2026-02-24 12:49:29 +00:00
Dave
b928eace9c story-kit: merge 119_story_mergemaster_should_resolve_merge_conflicts_instead_of_leaving_conflict_markers_on_master 2026-02-23 23:22:24 +00:00
Dave
908fcef353 story-kit: merge 118_bug_agent_pool_retains_stale_running_state_after_completion_blocking_auto_assign 2026-02-23 22:53:23 +00:00
Dave
85fddcb71a story-kit: merge 117_story_show_startup_reconciliation_progress_in_ui 2026-02-23 22:50:57 +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
Dave
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
Dave
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
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
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
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
225073649b story-kit: start 88_story_auto_assign_agents_to_available_work_on_server_startup 2026-02-23 18:20:24 +00:00
Dave
3f008b7777 Fix invalid model names and preserve worktrees for debugging
model = "sonnet-4.6" is not a valid Claude CLI model identifier,
causing all coder/qa/mergemaster agents to get 404 errors from the
API and exit immediately with no work done. Change to
"claude-sonnet-4-6". Also disable automatic worktree cleanup on
archive so agent work can be inspected post-mortem.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:05:26 +00:00
Dave
9bd266eb3f Server-owned agent completion: remove report_completion dependency
When an agent process exits normally, the server now automatically runs
acceptance gates (uncommitted changes check + cargo clippy + tests) and
advances the pipeline based on results. This replaces the previous model
where agents had to explicitly call report_completion as an MCP tool.

Changes:
- Add run_server_owned_completion() free function in agents.rs that runs
  gates on process exit, stores a CompletionReport, and advances pipeline
- Wire it into start_agent's spawned task (replaces simple status setting)
- Remove report_completion from MCP tools list and handler (mcp.rs)
- Update default_agent_prompt() to not reference report_completion
- Update all agent prompts in project.toml (supervisor, coders, qa,
  mergemaster) to reflect server-owned completion
- Add guard: skip gates if completion was already recorded (legacy path)
- Add 4 new tests for server-owned completion behavior
- Update tools_list test (26 tools, report_completion excluded)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:00:10 +00:00
Dave
16989a12fc story-kit: merge 69_story_test_coverage_qa_gate 2026-02-23 13:40:12 +00:00
Dave
00b212d7e3 Server drives pipeline as state machine
On agent completion, the server automatically runs script/test and
advances stories through the pipeline: coder → qa → mergemaster →
archive. Failed gates restart the agent with failure context. Agents
no longer need to call pipeline-advancing MCP tools.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 13:13:41 +00:00
Dave
cbd0233e5e story-kit: start 65_story_standardised_script_test_entry_point_for_all_projects 2026-02-23 12:59:55 +00:00
Dave
810608d3d8 Spike 61: filesystem watcher and UI simplification
Add notify-based filesystem watcher for .story_kit/work/ that
auto-commits changes with deterministic messages and broadcasts
events over WebSocket. Push full pipeline state (Upcoming, Current,
QA, To Merge) to frontend on connect and after every watcher event.

Strip dead UI: remove ReviewPanel, GatePanel, TodoPanel,
UpcomingPanel and all associated REST polling. Replace with 4
generic StagePanel components driven by WebSocket. Simplify
AgentPanel to roster-only.

Delete all 11 workflow HTTP endpoints and 16 request/response types
from the server. Clean dead code from workflow module. MCP tools
call Rust functions directly and need none of the HTTP layer.

Net: ~4,100 lines deleted, ~400 added.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 19:39:19 +00:00
Dave
122f481ab9 Story 53: Add QA agent role with request_qa MCP tool
- Add `qa` agent entry to `.story_kit/project.toml` with a detailed
  prompt covering code quality scan, test verification, manual testing
  support, and structured report generation
- Add `move_story_to_qa` function in `agents.rs` that moves a work item
  from `work/2_current/` to `work/3_qa/` and auto-commits (idempotent)
- Add `request_qa` MCP tool in `mcp.rs` that moves the story to
  `work/3_qa/` and starts the QA agent on the existing worktree
- Add unit tests for `move_story_to_qa` (moves, idempotent, error cases)
- Update `tools_list_returns_all_tools` test to expect 27 tools

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 17:45:43 +00:00
Dave
9dab18d597 Story 52: Mergemaster agent role with merge_agent_work MCP tool
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:36:35 +00:00
Dave
e15fbffbb8 Fix 25 tests for work/ directory restructure (story 60)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:24:26 +00:00
Dave
e1e0d49759 Story 60: Status-Based Directory Layout with work/ pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:17:12 +00:00