Compare commits

...

265 Commits

Author SHA1 Message Date
Timmy fcc2b9c3eb Bump version to 0.5.0 2026-03-23 13:11:57 +00:00
dave 0c4239501a storkit: done 370_bug_scaffold_does_not_create_mcp_json_in_project_root 2026-03-23 13:00:46 +00:00
dave 13b6ecd958 storkit: merge 370_bug_scaffold_does_not_create_mcp_json_in_project_root 2026-03-23 13:00:43 +00:00
dave 1816a94617 storkit: merge 369_bug_cli_treats_help_and_version_as_project_paths 2026-03-23 12:55:58 +00:00
dave 56d3373e69 Revert gVisor (runsc) from Docker setup
gVisor is incompatible with OrbStack bind mounts on macOS — writes to
/mnt/mac are blocked by the gVisor filesystem sandbox. Removing
runtime: runsc from docker-compose.yml, the gVisor setup docs from
README.md, and the runsc assertion test from rebuild.rs.

The existing Docker hardening (read-only root, cap_drop ALL,
no-new-privileges, resource limits) remains in place.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:53:10 +00:00
dave efdb0c5814 storkit: create 370_bug_scaffold_does_not_create_mcp_json_in_project_root 2026-03-23 12:43:48 +00:00
dave b8365275d8 storkit: create 370_bug_scaffold_does_not_create_mcp_json_in_project_root 2026-03-23 12:43:15 +00:00
dave 6ddfd29927 storkit: create 369_bug_cli_treats_help_and_version_as_project_paths 2026-03-23 12:43:04 +00:00
dave 01b157a2e4 storkit: create 369_bug_cli_treats_help_and_version_as_project_paths 2026-03-23 12:42:04 +00:00
dave 99a59d7ad1 storkit: create 369_bug_cli_treats_help_and_version_as_project_paths 2026-03-23 12:41:27 +00:00
dave eb8adb6225 storkit: create 369_bug_cli_treats_help_and_version_as_project_paths 2026-03-23 12:39:15 +00:00
dave 2262f2ca6b storkit: create 368_story_web_ui_oauth_flow_for_claude_authentication 2026-03-23 11:59:43 +00:00
dave 2bb36d0e68 storkit: accept 360_story_run_storkit_container_under_gvisor_runsc_runtime 2026-03-23 11:48:32 +00:00
dave 86102f8ad6 storkit: done 360_story_run_storkit_container_under_gvisor_runsc_runtime 2026-03-23 11:45:47 +00:00
dave edf47601c4 storkit: merge 360_story_run_storkit_container_under_gvisor_runsc_runtime 2026-03-23 11:45:43 +00:00
dave b606e1de92 storkit: accept 367_story_rename_bot_whatsup_command_to_status 2026-03-23 02:38:20 +00:00
dave 0d5f0de876 storkit: accept 365_story_surface_api_rate_limit_warnings_in_chat 2026-03-22 23:29:13 +00:00
dave bb41f3951c storkit: accept 366_story_bot_sends_shutdown_message_on_server_stop_or_rebuild 2026-03-22 23:11:51 +00:00
dave e3d7931f17 storkit: done 367_story_rename_bot_whatsup_command_to_status 2026-03-22 22:40:47 +00:00
dave 87b5648123 storkit: merge 367_story_rename_bot_whatsup_command_to_status 2026-03-22 22:40:43 +00:00
dave 506bdd4df8 storkit: accept 363_story_mcp_tool_for_whatsup_story_triage 2026-03-22 21:44:39 +00:00
dave a9bec3c29e storkit: accept 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-22 21:43:38 +00:00
dave 69936f457f storkit: done 365_story_surface_api_rate_limit_warnings_in_chat 2026-03-22 19:28:48 +00:00
dave 24dd3d9fa9 storkit: merge 365_story_surface_api_rate_limit_warnings_in_chat 2026-03-22 19:28:45 +00:00
dave bc45a91b3e Fix frontend tests failing in Docker due to wrong-platform rollup binary
The bind-mounted node_modules from macOS contains darwin-arm64 native
binaries which don't work in the Linux container. Run npm install on
container startup to get the correct platform binaries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 19:28:21 +00:00
dave db7c11508e storkit: done 366_story_bot_sends_shutdown_message_on_server_stop_or_rebuild 2026-03-22 19:11:33 +00:00
dave 47173e0d3a storkit: merge 366_story_bot_sends_shutdown_message_on_server_stop_or_rebuild 2026-03-22 19:11:29 +00:00
dave f610ef6046 Restore codebase deleted by bad auto-commit e4227cf
Commit e4227cf (a story creation auto-commit) erroneously deleted 175
files from master's tree, likely due to a race condition between
concurrent git operations. This commit re-adds all files from the
working directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 19:07:07 +00:00
dave 89f776b978 storkit: create 367_story_rename_bot_whatsup_command_to_status 2026-03-22 19:01:22 +00:00
dave e4227cf673 storkit: create 365_story_surface_api_rate_limit_warnings_in_chat 2026-03-22 18:19:23 +00:00
dave f346712dd1 storkit: create 365_story_surface_api_rate_limit_warnings_in_chat 2026-03-22 18:19:23 +00:00
dave f9419e5ea7 Fix worktree cleanup looping on orphaned directories
When git worktree remove fails with "not a working tree", fall back to
removing the directory directly and run git worktree prune to clean
stale metadata. Fixes bug 364.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:18:08 +00:00
dave c32bab03a4 storkit: delete 364_bug_worktree_cleanup_loops_on_orphaned_directories 2026-03-22 18:17:43 +00:00
dave ea23042698 storkit: create 366_story_bot_sends_shutdown_message_on_server_stop_or_rebuild 2026-03-22 18:17:04 +00:00
dave 3825b03fda storkit: create 365_story_surface_api_rate_limit_warnings_in_chat 2026-03-22 18:12:37 +00:00
dave d6cfd18e6a storkit: create 364_bug_worktree_cleanup_loops_on_orphaned_directories 2026-03-22 18:07:37 +00:00
dave 01ac8a8345 Remove empty serve submodule reference
Blank folder, no longer needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:06:23 +00:00
dave 153f8812d7 Remove obsolete TIMMY_BRIEFING.md
One-time briefing doc from spike 329, no longer needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:06:15 +00:00
dave 01c7c39872 Update .ignore to use renamed storkit paths
.story_kit/ and .story_kit_port were stale references from before the
rename to storkit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:06:07 +00:00
dave eec8f3ac15 storkit: delete 364_bug_test_suite_incompatible_with_hardened_docker_environment 2026-03-22 17:54:48 +00:00
dave 28626ab80a storkit: done 363_story_mcp_tool_for_whatsup_story_triage 2026-03-22 17:47:08 +00:00
dave 4262af7faa storkit: merge 363_story_mcp_tool_for_whatsup_story_triage 2026-03-22 17:47:05 +00:00
dave 628b60ad15 storkit: done 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-22 17:43:01 +00:00
dave c504738949 storkit: merge 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-22 17:42:57 +00:00
Timmy 0d5b9724c1 Make ANTHROPIC_API_KEY optional in docker-compose
When unset, Claude Code falls back to OAuth credentials from
`claude login`, allowing agents to run on a Max subscription
instead of prepaid API credits.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 17:31:09 +00:00
Timmy b189ca845c Pre-create target dirs with storkit ownership in Dockerfile
Docker named volumes inherit directory ownership when first created.
By creating /workspace/target and /app/target as storkit-owned before
the USER directive, the volumes will be writable by the storkit user.
Without this, cargo build/test/clippy all fail with Permission Denied.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:59:32 +00:00
Dave 8094d32cbb revert: remove Docker workarounds now that container is fixed
Reverts workarounds added by the 361 agent when the hardened Docker
container broke the test suite:

- gates.rs: restore tempfile::tempdir() (was changed to tempdir_in
  CARGO_MANIFEST_DIR to avoid noexec /tmp; noexec is now removed)
- pool/mod.rs: restore ps -p <pid> check in process_is_running (was
  changed to /proc/<pid> existence check; procps is now installed)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 14:21:34 +00:00
Dave 1c2824fa31 fix: harden Docker environment so tests pass inside container
- Add procps to runtime stage so `ps` is available for process management
- Remove noexec from /tmp and /home/storkit tmpfs mounts so test scripts
  can be executed from tempdir
- Update coder agent system_prompt to run clippy --all-targets --all-features
  matching what the server acceptance gate actually runs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 14:21:27 +00:00
Dave af72f593e8 storkit: create 364_bug_test_suite_incompatible_with_hardened_docker_environment 2026-03-22 13:50:14 +00:00
Dave ac8112bf0b storkit: accept 361_story_remove_deprecated_manual_qa_front_matter_field 2026-03-22 01:48:51 +00:00
Dave 9bf4b65707 storkit: accept 359_story_harden_docker_setup_for_security 2026-03-22 00:23:40 +00:00
Dave 240ebf055a storkit: accept 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-22 00:22:39 +00:00
Dave 293a2fcfb6 storkit: done 361_story_remove_deprecated_manual_qa_front_matter_field 2026-03-21 21:51:31 +00:00
Dave 4ccc3d9149 storkit: merge 361_story_remove_deprecated_manual_qa_front_matter_field 2026-03-21 21:51:27 +00:00
Timmy eef0f3ee7d Add clippy to Docker image
Acceptance gates run cargo clippy but the component wasn't installed
in the build stage. Agents were doing real work then failing every
gate check because clippy wasn't available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:43:09 +00:00
Dave 9dc7c21b05 storkit: create 363_story_mcp_tool_for_whatsup_story_triage 2026-03-21 21:29:42 +00:00
Dave 76369de391 storkit: create 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-21 21:26:02 +00:00
Dave b747cc0fab storkit: create 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-21 21:25:36 +00:00
Dave f74a0425a9 storkit: create 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-21 21:22:52 +00:00
Dave b0b21765d9 storkit: create 362_story_bot_whatsup_command_shows_in_progress_work_summary 2026-03-21 21:22:16 +00:00
Timmy 9075bc1a84 Fix tmpfs ownership so storkit user can write to home dir
The tmpfs at /home/storkit defaulted to root ownership (mode=755),
so Claude Code couldn't write ~/.claude.json or ~/.cache/. Set
uid=999,gid=999 to match the storkit user.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:19:16 +00:00
Timmy 9f873dc839 Fix Claude Code hanging in hardened container
Claude Code writes to ~/.claude.json, ~/.cache/, and ~/.npm/ which
failed silently on the read-only root filesystem. Add tmpfs at
/home/storkit so the home dir is writable (the claude-state volume
overlays on top for persistent .claude/ data).

Also fix .dockerignore: use **/target/ to match nested target dirs,
add .storkit/logs/ and **/node_modules/ to prevent multi-GB build
context transfers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:16:24 +00:00
Dave 3774c3dca7 storkit: done 359_story_harden_docker_setup_for_security 2026-03-21 20:57:07 +00:00
Timmy cd095f9a99 Fix rebuild_and_restart in Docker by using cargo output path
Use the known cargo build output path instead of current_exe() when
re-execing after a rebuild. In Docker, the running binary lives at
/usr/local/bin/storkit (read-only) while cargo writes the new binary
to /app/target/release/storkit (a writable volume), so current_exe()
would just restart the old binary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 20:42:38 +00:00
Timmy fe0f560b58 Harden Docker container security
Run as non-root user (fixes Claude Code refusing bypassPermissions as
root, which caused all agent spawns to exit instantly with no session).
Add read-only root filesystem, drop all capabilities, set
no-new-privileges, bind port to localhost only, and require
GIT_USER_NAME/GIT_USER_EMAIL env vars at startup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 20:33:50 +00:00
Timmy 0416bf343c storkit: delete 57_story_live_test_gate_updates 2026-03-21 20:23:45 +00:00
Timmy c3e4f85903 storkit: done 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-21 20:22:02 +00:00
Timmy 52d9d0f9ce storkit: done 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-21 20:20:41 +00:00
Timmy 996ba82682 storkit: create 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-21 20:19:56 +00:00
Timmy 1f4152c894 storkit: create 361_story_remove_deprecated_manual_qa_front_matter_field 2026-03-21 19:59:52 +00:00
Timmy 02b481ee4c storkit: create 359_story_harden_docker_setup_for_security 2026-03-21 19:48:44 +00:00
Timmy 9c339c118f storkit: create 359_story_harden_docker_setup_for_security 2026-03-21 19:45:26 +00:00
Timmy 4790aac286 storkit: create 359_story_harden_docker_setup_for_security and 360_story_run_storkit_container_under_gvisor_runsc_runtime 2026-03-21 19:43:48 +00:00
Dave b2d92d6059 storkit: accept 90_story_fetch_real_context_window_size_from_anthropic_models_api 2026-03-21 15:58:15 +00:00
Dave 71887af2d3 storkit: accept 358_story_remove_makefile_and_make_script_release_the_single_entry_point_for_releases 2026-03-21 15:55:15 +00:00
Dave 5db9965962 storkit: done 358_story_remove_makefile_and_make_script_release_the_single_entry_point_for_releases 2026-03-21 12:04:11 +00:00
Dave e109e1ba5c storkit: merge 358_story_remove_makefile_and_make_script_release_the_single_entry_point_for_releases 2026-03-21 12:04:08 +00:00
Dave 3554594d8d storkit: done 90_story_fetch_real_context_window_size_from_anthropic_models_api 2026-03-21 12:01:24 +00:00
Dave a6c8cf0daf storkit: merge 90_story_fetch_real_context_window_size_from_anthropic_models_api 2026-03-21 12:01:21 +00:00
Dave 30a56d03e5 storkit: create 358_story_remove_makefile_and_make_script_release_the_single_entry_point_for_releases 2026-03-21 11:55:13 +00:00
Dave 4734bd943f Fixing release 2026-03-21 11:52:18 +00:00
Dave a1dd88579b storkit: accept 344_story_chatgpt_agent_backend_via_openai_api 2026-03-21 03:40:23 +00:00
Dave 759a289894 storkit: done 344_story_chatgpt_agent_backend_via_openai_api 2026-03-20 23:52:24 +00:00
Dave be3b5b0b60 storkit: merge 344_story_chatgpt_agent_backend_via_openai_api 2026-03-20 23:52:21 +00:00
Dave fbf391684a storkit: create 344_story_chatgpt_agent_backend_via_openai_api 2026-03-20 23:39:34 +00:00
Dave 65546a42b7 storkit: accept 343_refactor_abstract_agent_runtime_to_support_non_claude_code_backends 2026-03-20 22:58:45 +00:00
Dave 4e014d45c3 storkit: accept 345_story_gemini_agent_backend_via_google_ai_api 2026-03-20 22:54:45 +00:00
Dave 4f39de437f storkit: done 345_story_gemini_agent_backend_via_google_ai_api 2026-03-20 22:53:44 +00:00
Dave 79ee6eb0dc storkit: merge 345_story_gemini_agent_backend_via_google_ai_api 2026-03-20 22:53:41 +00:00
Dave c930c537bc storkit: accept 357_story_bot_assign_command_to_pre_assign_a_model_to_a_story 2026-03-20 22:41:00 +00:00
Dave f129a38704 storkit: done 343_refactor_abstract_agent_runtime_to_support_non_claude_code_backends 2026-03-20 22:07:52 +00:00
Dave 4344081b54 storkit: merge 343_refactor_abstract_agent_runtime_to_support_non_claude_code_backends 2026-03-20 22:07:49 +00:00
Dave 52c5344ce5 storkit: accept 350_story_mcp_tool_for_code_definitions_lookup 2026-03-20 19:30:08 +00:00
Dave 35bd196790 storkit: accept 356_story_start_command_should_say_queued_not_error_when_all_coders_are_busy 2026-03-20 19:09:02 +00:00
Dave 65c8dc19d6 storkit: create 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-20 19:05:18 +00:00
Dave 645a141d2d storkit: create 343_refactor_abstract_agent_runtime_to_support_non_claude_code_backends 2026-03-20 18:57:52 +00:00
Dave 11d1980920 storkit: done 357_story_bot_assign_command_to_pre_assign_a_model_to_a_story 2026-03-20 18:51:48 +00:00
Dave 83879cfa9e storkit: merge 357_story_bot_assign_command_to_pre_assign_a_model_to_a_story 2026-03-20 18:51:45 +00:00
Dave 972d8f3c12 storkit: create 357_story_bot_assign_command_to_pre_assign_a_model_to_a_story 2026-03-20 18:40:31 +00:00
Dave 4b1167025c storkit: accept 355_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 16:24:54 +00:00
Dave 23eb752e3b storkit: accept 354_story_make_help_command_output_alphabetical 2026-03-20 16:22:53 +00:00
Dave 7aa1d0e322 storkit: done 356_story_start_command_should_say_queued_not_error_when_all_coders_are_busy 2026-03-20 16:04:49 +00:00
Dave a6dcd48da9 storkit: merge 356_story_start_command_should_say_queued_not_error_when_all_coders_are_busy 2026-03-20 16:04:45 +00:00
Dave 87958b0a2a storkit: done 354_story_make_help_command_output_alphabetical 2026-03-20 15:39:35 +00:00
Dave ea061d868d storkit: merge 354_story_make_help_command_output_alphabetical 2026-03-20 15:39:32 +00:00
Dave 6a03ca725e storkit: done 350_story_mcp_tool_for_code_definitions_lookup 2026-03-20 15:36:30 +00:00
Dave 0cd7c15227 storkit: done 355_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 15:30:19 +00:00
Dave 0cb43a4de4 storkit: merge 355_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 15:30:16 +00:00
Dave cb663b620b storkit: accept 348_story_mcp_tools_for_code_search_grep_and_glob 2026-03-20 15:28:16 +00:00
Dave 0653af701c storkit: done 348_story_mcp_tools_for_code_search_grep_and_glob 2026-03-20 15:28:09 +00:00
Dave b1a96990c4 storkit: accept 349_story_mcp_tools_for_git_operations 2026-03-20 15:21:40 +00:00
Dave e46f855ab3 storkit: done 349_story_mcp_tools_for_git_operations 2026-03-20 15:20:39 +00:00
Dave d838dd7127 storkit: merge 349_story_mcp_tools_for_git_operations 2026-03-20 15:20:34 +00:00
Dave 02ee48911e storkit: accept 353_story_add_party_emoji_to_done_stage_notification_messages 2026-03-20 15:18:19 +00:00
Dave 6429b20974 storkit: accept 352_bug_ambient_on_off_command_not_intercepted_by_bot_after_refactors 2026-03-20 15:16:38 +00:00
Dave dcf0be2998 storkit: create 356_story_start_command_should_say_queued_not_error_when_all_coders_are_busy 2026-03-20 15:08:05 +00:00
Dave efea81b487 storkit: accept 351_story_bot_reset_command_to_clear_conversation_context 2026-03-20 15:03:49 +00:00
Dave 491ca19a0b storkit: accept 347_story_mcp_tool_for_shell_command_execution 2026-03-20 13:19:25 +00:00
Dave 243b75e966 storkit: accept 346_story_mcp_tools_for_file_operations_read_write_edit_list 2026-03-20 13:18:24 +00:00
Dave 7693cc820c storkit: accept 340_story_web_ui_rebuild_and_restart_button 2026-03-20 13:04:21 +00:00
Dave ba4af4179e storkit: accept 339_story_web_ui_agent_assignment_dropdown_on_work_items 2026-03-20 12:59:20 +00:00
Dave d60ed18e0f storkit: accept 338_story_web_ui_button_to_move_stories_between_pipeline_stages 2026-03-20 12:52:17 +00:00
Dave 94f4ba831b storkit: accept 336_story_web_ui_button_to_start_a_coder_on_a_story 2026-03-20 12:50:16 +00:00
Dave c4a113b855 Bump version to 0.4.1 2026-03-20 12:48:35 +00:00
Dave 5510d9d19d storkit: accept 337_story_web_ui_button_to_stop_an_agent_on_a_story 2026-03-20 12:47:15 +00:00
Dave ca949aec46 Update package-lock.json for 0.4.1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 12:32:52 +00:00
Dave 9ceda6694d storkit: accept 342_story_web_ui_button_to_delete_a_story_from_the_pipeline 2026-03-20 12:32:13 +00:00
Dave b0a1eafd8d Bump to 0.4.1, fix release script to match legacy commit prefix and auto-bump versions
- Bumps server/Cargo.toml and frontend/package.json to 0.4.1
- Release script now auto-bumps both version files when run
- Changelog generation matches both "storkit:" and "story-kit:" prefixes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 12:31:50 +00:00
Dave b2c9ece9e4 Bump version to 0.4.1 2026-03-20 12:31:19 +00:00
Dave 24ca585fd0 storkit: accept 330_refactor_consolidate_chat_transports_into_a_chat_module_with_transport_submodules 2026-03-20 12:29:12 +00:00
Dave c4e45b2841 The great storkit name conversion 2026-03-20 12:26:02 +00:00
Dave 51d878e117 storkit: create 355_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 12:24:08 +00:00
Dave cb991da84c storkit: create 354_story_make_help_command_output_alphabetical 2026-03-20 12:21:57 +00:00
Dave 28b78c4a32 storkit: accept 335_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 12:15:37 +00:00
Dave 6f47943369 storkit: accept 331_story_bot_start_command_to_start_a_coder_on_a_story 2026-03-20 12:14:37 +00:00
Dave 8885543c25 fix overview command to match both storkit and legacy story-kit commit prefixes
The .story_kit → .storkit rename updated the grep pattern but all historical
merge commits still use the old "story-kit:" prefix, so overview could not
find any stories.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 12:13:42 +00:00
Dave 2208aba3fb story-kit: accept 40_story_mcp_server_obeys_storykit_port 2026-03-20 12:03:20 +00:00
Dave d3f462e518 story-kit: accept 49_story_deterministic_bug_lifecycle_management 2026-03-20 12:02:03 +00:00
Dave 9581e5d51a rename .story_kit directory to .storkit and update all references
Renames the config directory and updates 514 references across 42 Rust
source files, plus CLAUDE.md, .gitignore, Makefile, script/release,
and .mcp.json files. All 1205 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 11:34:53 +00:00
Dave 375277f86e story-kit: done 353_story_add_party_emoji_to_done_stage_notification_messages 2026-03-20 11:25:03 +00:00
Dave c096488ba1 story-kit: merge 353_story_add_party_emoji_to_done_stage_notification_messages 2026-03-20 11:25:00 +00:00
Dave ab5fb734e5 story-kit: done 352_bug_ambient_on_off_command_not_intercepted_by_bot_after_refactors 2026-03-20 11:19:26 +00:00
Dave d7e814c02c story-kit: merge 352_bug_ambient_on_off_command_not_intercepted_by_bot_after_refactors 2026-03-20 11:19:22 +00:00
Dave 4268db8641 story-kit: create 353_story_add_party_emoji_to_done_stage_notification_messages 2026-03-20 11:17:32 +00:00
Dave 943bd38d19 story-kit: accept 328_refactor_split_commands_rs_into_individual_command_handler_modules 2026-03-20 11:16:26 +00:00
Dave 16df7b783d story-kit: done 351_story_bot_reset_command_to_clear_conversation_context 2026-03-20 11:16:26 +00:00
Dave 24eb20f985 story-kit: merge 351_story_bot_reset_command_to_clear_conversation_context 2026-03-20 11:16:23 +00:00
Dave 9f18cacbed story-kit: create 352_bug_ambient_on_off_command_not_intercepted_by_bot_after_refactors 2026-03-20 11:03:07 +00:00
Dave 737ddca884 story-kit: create 351_story_bot_reset_command_to_clear_conversation_context 2026-03-20 11:02:50 +00:00
Dave 0e8963591e story-kit: done 346_story_mcp_tools_for_file_operations_read_write_edit_list 2026-03-20 09:57:38 +00:00
Dave 492a0fc749 story-kit: done 347_story_mcp_tool_for_shell_command_execution 2026-03-20 09:54:49 +00:00
Dave 287c64faf1 story-kit: merge 347_story_mcp_tool_for_shell_command_execution 2026-03-20 09:54:46 +00:00
Dave 31085e8c9f fix: rename story-kit references to storkit in server code and settings
Updates -p flag in rebuild_and_restart, MCP server name, enabledMcpjsonServers,
and test values to match the new binary/crate name.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 09:24:06 +00:00
Dave 1a22e0cb41 chore: remove supervisor agent from project.toml
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 09:20:44 +00:00
Dave f653b51dd7 story-kit: create 350_story_mcp_tool_for_code_definitions_lookup 2026-03-20 09:19:19 +00:00
Dave 2f66c7d30e story-kit: create 349_story_mcp_tools_for_git_operations 2026-03-20 09:18:48 +00:00
Dave 3031c158e7 story-kit: create 348_story_mcp_tools_for_code_search_grep_and_glob 2026-03-20 09:18:38 +00:00
Dave 6aa932b349 story-kit: create 347_story_mcp_tool_for_shell_command_execution 2026-03-20 09:18:27 +00:00
Dave fb23e2218b story-kit: create 346_story_mcp_tools_for_file_operations_read_write_edit_list 2026-03-20 09:18:17 +00:00
Dave 01d1c15d91 story-kit: create 345_story_gemini_agent_backend_via_google_ai_api 2026-03-20 09:16:27 +00:00
Dave 9622a1a572 story-kit: create 344_story_chatgpt_agent_backend_via_openai_api 2026-03-20 09:16:10 +00:00
Dave e99a3da336 story-kit: done 342_story_web_ui_button_to_delete_a_story_from_the_pipeline 2026-03-20 09:13:13 +00:00
Dave 60e1d7bf64 story-kit: merge 342_story_web_ui_button_to_delete_a_story_from_the_pipeline 2026-03-20 09:13:10 +00:00
Dave 3cfe25f97a story-kit: create 345_story_gemini_agent_backend_via_google_ai_api 2026-03-20 09:11:23 +00:00
Dave ebb9df9780 story-kit: create 344_story_chatgpt_agent_backend_via_openai_api 2026-03-20 09:11:09 +00:00
Dave d0ec1eebd7 story-kit: create 343_refactor_abstract_agent_runtime_to_support_non_claude_code_backends 2026-03-20 09:10:42 +00:00
Dave 19bb3a6b52 story-kit: done 340_story_web_ui_rebuild_and_restart_button 2026-03-20 09:10:29 +00:00
Dave 594114d671 story-kit: merge 340_story_web_ui_rebuild_and_restart_button 2026-03-20 09:10:26 +00:00
Dave 0897b36cc1 story-kit: done 339_story_web_ui_agent_assignment_dropdown_on_work_items 2026-03-20 09:07:46 +00:00
Dave 81e822642e story-kit: merge 339_story_web_ui_agent_assignment_dropdown_on_work_items 2026-03-20 09:07:44 +00:00
Dave 134cae216a story-kit: done 338_story_web_ui_button_to_move_stories_between_pipeline_stages 2026-03-20 09:05:12 +00:00
Dave 2b5c7578d3 story-kit: done 337_story_web_ui_button_to_stop_an_agent_on_a_story 2026-03-20 09:00:07 +00:00
Dave 3778162920 story-kit: merge 337_story_web_ui_button_to_stop_an_agent_on_a_story 2026-03-20 09:00:03 +00:00
Dave 8c3e92f936 story-kit: done 335_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 08:57:22 +00:00
Dave 25711fc16b story-kit: done 336_story_web_ui_button_to_start_a_coder_on_a_story 2026-03-20 08:52:46 +00:00
Dave e33979aacb story-kit: merge 336_story_web_ui_button_to_start_a_coder_on_a_story 2026-03-20 08:52:43 +00:00
Dave 31e2f823f7 story-kit: done 333_story_bot_stop_command_to_stop_an_agent_on_a_story 2026-03-20 08:49:57 +00:00
Dave ec5f4afcfb story-kit: done 332_story_bot_assign_command_to_assign_a_specific_agent_to_a_story 2026-03-20 08:44:34 +00:00
Dave 75640c6ecf story-kit: done 334_story_bot_move_command_to_move_stories_between_pipeline_stages 2026-03-20 08:39:45 +00:00
Dave 69030599d3 story-kit: merge 334_story_bot_move_command_to_move_stories_between_pipeline_stages 2026-03-20 08:39:42 +00:00
Dave adab08f804 story-kit: done 330_refactor_consolidate_chat_transports_into_a_chat_module_with_transport_submodules 2026-03-20 08:37:33 +00:00
Dave 3d59077a3c story-kit: delete 280_story_long_running_supervisor_agent_with_periodic_pipeline_polling 2026-03-20 08:32:18 +00:00
Dave 84acc82f8c story-kit: create 342_story_web_ui_button_to_delete_a_story_from_the_pipeline 2026-03-20 08:31:35 +00:00
Dave a2ea1d65aa story-kit: done 331_story_bot_start_command_to_start_a_coder_on_a_story 2026-03-20 08:30:20 +00:00
Dave 086eb908ee story-kit: merge 331_story_bot_start_command_to_start_a_coder_on_a_story 2026-03-20 08:30:17 +00:00
Dave c138246db3 story-kit: create 341_story_rename_story_kit_directory_to_storkit 2026-03-20 08:24:59 +00:00
Dave c7846c041c story-kit: create 341_story_rename_story_kit_directory_to_storkit 2026-03-20 08:23:10 +00:00
Dave 9b6bde95bc story-kit: create 340_story_web_ui_rebuild_and_restart_button 2026-03-20 08:16:20 +00:00
Dave f625534ff0 story-kit: create 339_story_web_ui_agent_assignment_dropdown_on_work_items 2026-03-20 08:16:11 +00:00
Dave 3f59420b2b story-kit: create 338_story_web_ui_button_to_move_stories_between_pipeline_stages 2026-03-20 08:15:57 +00:00
Dave 9730a923dd story-kit: create 337_story_web_ui_button_to_stop_an_agent_on_a_story 2026-03-20 08:15:48 +00:00
Dave c7b2b5820b story-kit: create 336_story_web_ui_button_to_start_a_coder_on_a_story 2026-03-20 08:15:40 +00:00
Dave 303fdbad6f story-kit: create 335_story_bot_rebuild_command_to_trigger_server_rebuild_and_restart 2026-03-20 08:14:53 +00:00
Dave c0a7f5fbfb story-kit: create 334_story_bot_move_command_to_move_stories_between_pipeline_stages 2026-03-20 08:14:42 +00:00
Dave 5215956314 story-kit: create 333_story_bot_stop_command_to_stop_an_agent_on_a_story 2026-03-20 08:14:05 +00:00
Dave 27b86da0aa story-kit: create 332_story_bot_assign_command_to_assign_a_specific_agent_to_a_story 2026-03-20 08:13:55 +00:00
Dave 2ce0166ea8 story-kit: create 331_story_bot_start_command_to_start_a_coder_on_a_story 2026-03-20 08:13:46 +00:00
Dave 2d377532df story-kit: create 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-20 08:10:59 +00:00
Dave 3885802d79 story-kit: create 330_refactor_consolidate_chat_transports_into_a_chat_module_with_transport_submodules 2026-03-20 08:07:59 +00:00
Dave f650fef1e5 story-kit: create 330_refactor_consolidate_chat_transports_into_a_chat_module_with_transport_submodules 2026-03-20 08:05:53 +00:00
Dave dbc8849681 story-kit: create 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-20 07:32:12 +00:00
Dave b17ba0c8dd story-kit: done 328_refactor_split_commands_rs_into_individual_command_handler_modules 2026-03-20 07:29:01 +00:00
Dave eea797975b story-kit: merge 328_refactor_split_commands_rs_into_individual_command_handler_modules 2026-03-20 07:28:59 +00:00
Dave 67e6a4afe6 story-kit: create 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-20 07:24:53 +00:00
Dave 9c01bfebc8 story-kit: create 328_refactor_split_commands_rs_into_individual_command_handler_modules 2026-03-20 07:15:27 +00:00
Dave 8ea69fc70f story-kit: accept 327_story_bot_overview_command_shows_implementation_summary_for_a_story 2026-03-20 05:08:05 +00:00
Dave 1bd816f5a6 story-kit: accept 324_story_slack_bot_integration_for_bot_commands 2026-03-20 04:55:04 +00:00
Dave 5f3dcebfc3 story-kit: accept 321_story_whatsapp_htop_adaptation_for_no_edit_platforms 2026-03-20 04:26:00 +00:00
Dave ef9ec8bbbe story-kit: accept 322_story_whatsapp_24_hour_messaging_window_and_template_support 2026-03-20 04:22:57 +00:00
Dave 14a97ed4ed story-kit: accept 320_story_whatsapp_business_api_integration_for_bot_commands 2026-03-20 02:48:53 +00:00
Dave 3932aa65c2 story-kit: accept 317_refactor_split_pool_rs_into_pipeline_auto_assign_and_agent_management_modules 2026-03-20 02:41:49 +00:00
Dave 9a77ffaa83 story-kit: done 325_story_slack_llm_passthrough_for_conversational_queries 2026-03-20 01:30:48 +00:00
Dave a9d5e9f6f8 story-kit: accept 319_refactor_split_workflow_rs_into_story_bug_and_test_result_modules 2026-03-20 01:30:10 +00:00
Dave f5b1103bf6 story-kit: done 326_story_slack_slash_commands_for_pipeline_management 2026-03-20 01:26:09 +00:00
Dave 39707ce026 story-kit: merge 326_story_slack_slash_commands_for_pipeline_management 2026-03-20 01:26:06 +00:00
Dave ff1705f26c story-kit: done 327_story_bot_overview_command_shows_implementation_summary_for_a_story 2026-03-20 01:22:13 +00:00
Dave 14cab448cb story-kit: merge 327_story_bot_overview_command_shows_implementation_summary_for_a_story 2026-03-20 01:22:10 +00:00
Dave 973af81fa5 story-kit: done 324_story_slack_bot_integration_for_bot_commands 2026-03-20 01:12:11 +00:00
Dave 09890b5ea4 story-kit: merge 324_story_slack_bot_integration_for_bot_commands 2026-03-20 01:12:08 +00:00
Dave 4fe61c643b story-kit: create 327_story_bot_overview_command_shows_implementation_summary_for_a_story 2026-03-20 01:07:19 +00:00
Dave 665ffa9521 story-kit: create 326_story_slack_slash_commands_for_pipeline_management 2026-03-20 00:54:46 +00:00
Dave e558d716d8 story-kit: create 325_story_slack_llm_passthrough_for_conversational_queries 2026-03-20 00:54:36 +00:00
Dave cc403e7736 story-kit: create 324_story_slack_bot_integration_for_bot_commands 2026-03-20 00:54:26 +00:00
Dave 48edf6a94b chore: update problems.md and Cargo.lock after binary rename
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 00:50:01 +00:00
Dave 27c406330a rename binary from story-kit to storkit in Cargo.toml
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 00:46:18 +00:00
Dave 48aad2323d story-kit: accept 316_refactor_abstract_bot_transport_layer_for_multi_platform_support 2026-03-20 00:43:26 +00:00
Dave 6c00f66894 story-kit: done 321_story_whatsapp_htop_adaptation_for_no_edit_platforms 2026-03-20 00:30:37 +00:00
Dave 90c98f5b47 story-kit: accept 315_story_rename_binary_and_all_references_from_story_kit_to_storkit 2026-03-20 00:07:51 +00:00
Dave a8cb851ba7 story-kit: done 322_story_whatsapp_24_hour_messaging_window_and_template_support 2026-03-20 00:00:48 +00:00
Dave 02947700ba story-kit: merge 322_story_whatsapp_24_hour_messaging_window_and_template_support 2026-03-20 00:00:45 +00:00
Dave e3ade4cca5 story-kit: done 323_story_whatsapp_llm_passthrough_for_conversational_queries 2026-03-19 23:57:56 +00:00
Dave e9a0858d53 story-kit: merge 323_story_whatsapp_llm_passthrough_for_conversational_queries 2026-03-19 23:57:53 +00:00
Dave c84c33a1a7 story-kit: accept 314_story_show_token_cost_per_story_in_bot_status_command_output 2026-03-19 23:50:42 +00:00
Dave 09a47ac224 story-kit: accept 313_story_improve_htop_output_formatting_for_mobile_matrix_clients 2026-03-19 23:20:52 +00:00
Dave a791b9f49c story-kit: done 320_story_whatsapp_business_api_integration_for_bot_commands 2026-03-19 23:05:52 +00:00
Dave 351f770516 story-kit: merge 320_story_whatsapp_business_api_integration_for_bot_commands 2026-03-19 23:05:49 +00:00
Dave cc0110e577 story-kit: create 323_story_whatsapp_llm_passthrough_for_conversational_queries 2026-03-19 22:48:41 +00:00
Dave 8eff849e83 story-kit: create 322_story_whatsapp_24_hour_messaging_window_and_template_support 2026-03-19 22:48:29 +00:00
Dave 7439c227a9 story-kit: create 321_story_whatsapp_htop_adaptation_for_no_edit_platforms 2026-03-19 22:48:18 +00:00
Dave 887ab81898 story-kit: create 320_story_whatsapp_business_api_integration_for_bot_commands 2026-03-19 22:48:08 +00:00
Dave ef6201b273 story-kit: done 317_refactor_split_pool_rs_into_pipeline_auto_assign_and_agent_management_modules 2026-03-19 22:43:33 +00:00
Dave 5af3c17522 story-kit: merge 317_refactor_split_pool_rs_into_pipeline_auto_assign_and_agent_management_modules 2026-03-19 22:43:30 +00:00
Dave 7cb95260aa story-kit: done 318_refactor_split_mcp_rs_into_domain_specific_tool_modules 2026-03-19 21:56:37 +00:00
Dave cf4a40a431 story-kit: merge 318_refactor_split_mcp_rs_into_domain_specific_tool_modules 2026-03-19 21:56:34 +00:00
Dave 6c03c4f9dc story-kit: done 319_refactor_split_workflow_rs_into_story_bug_and_test_result_modules 2026-03-19 21:48:27 +00:00
Dave 4acf38f035 story-kit: merge 319_refactor_split_workflow_rs_into_story_bug_and_test_result_modules 2026-03-19 21:48:24 +00:00
Dave d6d7fb3c59 story-kit: create 319_refactor_split_workflow_rs_into_story_bug_and_test_result_modules 2026-03-19 21:29:44 +00:00
Dave 9e4587ceb4 story-kit: create 318_refactor_split_mcp_rs_into_domain_specific_tool_modules 2026-03-19 21:29:34 +00:00
Dave 72216fe7ce story-kit: create 317_refactor_split_pool_rs_into_pipeline_auto_assign_and_agent_management_modules 2026-03-19 21:29:24 +00:00
Dave 9807eb6bb0 story-kit: done 316_refactor_abstract_bot_transport_layer_for_multi_platform_support 2026-03-19 20:45:53 +00:00
Dave 7eb9686bfb story-kit: merge 316_refactor_abstract_bot_transport_layer_for_multi_platform_support 2026-03-19 20:45:50 +00:00
Dave 3b9cea22bb story-kit: create 316_refactor_abstract_bot_transport_layer_for_multi_platform_support 2026-03-19 20:21:38 +00:00
Dave e2a8b978f7 story-kit: done 315_story_rename_binary_and_all_references_from_story_kit_to_storkit 2026-03-19 20:15:22 +00:00
Dave 748d86cf10 story-kit: done 314_story_show_token_cost_per_story_in_bot_status_command_output 2026-03-19 19:59:07 +00:00
Dave 060d5a40a4 story-kit: merge 314_story_show_token_cost_per_story_in_bot_status_command_output 2026-03-19 19:59:04 +00:00
Dave 3cb4f32634 story-kit: create 315_story_rename_binary_and_all_references_from_story_kit_to_storkit 2026-03-19 19:55:41 +00:00
Dave e00d780940 story-kit: create 314_story_show_token_cost_per_story_in_bot_status_command_output 2026-03-19 19:50:33 +00:00
Dave df7556c0f3 story-kit: accept 312_bug_auto_assign_assigns_mergemaster_to_coding_stage_stories 2026-03-19 19:49:53 +00:00
Dave 07f8defad0 story-kit: done 313_story_improve_htop_output_formatting_for_mobile_matrix_clients 2026-03-19 19:45:58 +00:00
Dave 1739c2ff58 story-kit: merge 313_story_improve_htop_output_formatting_for_mobile_matrix_clients 2026-03-19 19:45:55 +00:00
Dave e6eaa10c16 story-kit: accept 310_story_bot_delete_command_removes_a_story_from_the_pipeline 2026-03-19 19:43:35 +00:00
Dave 110db662a9 story-kit: accept 311_story_server_enforced_retry_limits_for_failed_merge_and_empty_diff_stories 2026-03-19 19:42:34 +00:00
Dave 9998b3ed25 story-kit: done 312_bug_auto_assign_assigns_mergemaster_to_coding_stage_stories 2026-03-19 19:32:41 +00:00
Dave d27a389a21 story-kit: merge 312_bug_auto_assign_assigns_mergemaster_to_coding_stage_stories 2026-03-19 19:32:38 +00:00
Dave 11a6be4b45 story-kit: create 313_story_improve_htop_output_formatting_for_mobile_matrix_clients 2026-03-19 19:20:42 +00:00
485 changed files with 30346 additions and 16020 deletions
+5 -7
View File
@@ -1,12 +1,10 @@
{
"enabledMcpjsonServers": [
"story-kit"
],
"enabledMcpjsonServers": ["storkit"],
"permissions": {
"allow": [
"Bash(./server/target/debug/story-kit:*)",
"Bash(./target/debug/story-kit:*)",
"Bash(STORYKIT_PORT=*)",
"Bash(./server/target/debug/storkit:*)",
"Bash(./target/debug/storkit:*)",
"Bash(STORKIT_PORT=*)",
"Bash(cargo build:*)",
"Bash(cargo check:*)",
"Bash(cargo clippy:*)",
@@ -56,7 +54,7 @@
"WebFetch(domain:portkey.ai)",
"WebFetch(domain:www.shuttle.dev)",
"WebSearch",
"mcp__story-kit__*",
"mcp__storkit__*",
"Edit",
"Write",
"Bash(find *)",
+11
View File
@@ -0,0 +1,11 @@
# Docker build context exclusions
**/target/
**/node_modules/
frontend/dist/
.storkit/worktrees/
.storkit/logs/
.storkit/work/6_archived/
.git/
*.swp
*.swo
.DS_Store
+2 -2
View File
@@ -5,9 +5,9 @@
# Local environment (secrets)
.env
# App specific (root-level; story-kit subdirectory patterns live in .story_kit/.gitignore)
# App specific (root-level; storkit subdirectory patterns live in .storkit/.gitignore)
store.json
.story_kit_port
.storkit_port
# Rust stuff
target
+2 -2
View File
@@ -3,6 +3,6 @@ frontend/
node_modules/
.claude/
.git/
.story_kit/
.storkit/
store.json
.story_kit_port
.storkit_port
+1 -1
View File
@@ -1,6 +1,6 @@
{
"mcpServers": {
"story-kit": {
"storkit": {
"type": "http",
"url": "http://localhost:3001/mcp"
}
+1 -1
View File
@@ -11,7 +11,7 @@ When you start a new session with this project:
1. **Check for MCP Tools:** Read `.mcp.json` to discover the MCP server endpoint. Then list available tools by calling:
```bash
curl -s "$(jq -r '.mcpServers["story-kit"].url' .mcp.json)" \
curl -s "$(jq -r '.mcpServers["storkit"].url' .mcp.json)" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
```
+61
View File
@@ -0,0 +1,61 @@
homeserver = "https://matrix.example.com"
username = "@botname:example.com"
password = "your-bot-password"
# List one or more rooms to listen in. Use a single-element list for one room.
room_ids = ["!roomid:example.com"]
# Optional: the deprecated single-room key is still accepted for backwards compat.
# room_id = "!roomid:example.com"
allowed_users = ["@youruser:example.com"]
enabled = false
# Maximum conversation turns to remember per room (default: 20).
# history_size = 20
# Rooms where the bot responds to all messages (not just addressed ones).
# This list is updated automatically when users toggle ambient mode at runtime.
# ambient_rooms = ["!roomid:example.com"]
# ── WhatsApp Business API ──────────────────────────────────────────────
# Set transport = "whatsapp" to use WhatsApp instead of Matrix.
# The webhook endpoint will be available at /webhook/whatsapp.
# You must configure this URL in the Meta Developer Dashboard.
#
# transport = "whatsapp"
# whatsapp_phone_number_id = "123456789012345"
# whatsapp_access_token = "EAAx..."
# whatsapp_verify_token = "my-secret-verify-token"
#
# ── 24-hour messaging window & notification templates ─────────────────
# WhatsApp only allows free-form text messages within 24 hours of the last
# inbound message from a user. For proactive pipeline notifications sent
# after the window expires, an approved Meta message template is used.
#
# Register the template in the Meta Business Manager:
# 1. Go to Business Settings → WhatsApp → Message Templates → Create.
# 2. Category: UTILITY
# 3. Template name: pipeline_notification (or your chosen name below)
# 4. Language: English (en_US)
# 5. Body text (example):
# Story *{{1}}* has moved to *{{2}}*.
# Where {{1}} = story name, {{2}} = pipeline stage.
# 6. Submit for review. Meta typically approves utility templates within
# minutes; transactional categories may take longer.
#
# Once approved, set the name below (default: "pipeline_notification"):
# whatsapp_notification_template = "pipeline_notification"
# ── Slack Bot API ─────────────────────────────────────────────────────
# Set transport = "slack" to use Slack instead of Matrix.
# The webhook endpoint will be available at /webhook/slack.
# Configure this URL in the Slack App → Event Subscriptions → Request URL.
#
# Required Slack App scopes: chat:write, chat:update
# Subscribe to bot events: message.channels, message.groups, message.im
#
# transport = "slack"
# slack_bot_token = "xoxb-..."
# slack_signing_secret = "your-signing-secret"
# slack_channel_ids = ["C01ABCDEF"]
+28
View File
@@ -0,0 +1,28 @@
# Problems
Recurring issues observed during pipeline operation. Review periodically and create stories for systemic problems.
## 2026-03-18: Stories graduating to "done" with empty merges (7 of 10)
Pipeline allows stories to move through coding → QA → merge → done without any actual code changes landing on master. The squash-merge produces an empty diff but the pipeline still marks the story as done. Affected stories: 247, 273, 274, 278, 279, 280, 92. Only 266, 271, 277, and 281 actually shipped code. Root cause: no check that the merge commit contains a non-empty diff. Filed bug 283 for the manual_qa gate issue specifically, but the empty-merge-to-done problem is broader and needs its own fix.
## 2026-03-18: Agent committed directly to master instead of worktree
Multiple agents have committed directly to master instead of their worktree/feature branch:
- Commit `5f4591f` ("fix: update should_commit_stage test to match 5_done") — likely mergemaster
- Commit `a32cfbd` ("Add bot-level command registry with help command") — story 285 coder committed code + Cargo.lock directly to master
Agents should only commit to their feature branch or merge-queue branch, never to master directly. Suspect agents are running `git commit` in the project root instead of the worktree directory. This can also revert uncommitted fixes on master (e.g. project.toml pkill fix was overwritten). Frequency: at least 2 confirmed cases. This is a recurring and serious problem — needs a guard in the server or agent prompts.
## 2026-03-19: Auto-assign re-assigns mergemaster to failed merge stories in a loop
After bug 295 fix (`auto_assign_available_work` after every pipeline advance), mergemaster gets re-assigned to stories that already have a merge failure flag. Story 310 had an empty diff merge failure — mergemaster correctly reported the failure, but auto-assign immediately re-assigned mergemaster to the same story, creating an infinite retry loop. The auto-assign logic needs to check for the `merge_failure` front matter flag before re-assigning agents to stories in `4_merge/`.
## 2026-03-19: Coder produces no code (complete ghost — story 310)
Story 310 (Bot delete command) went through the full pipeline — coder session ran, passed QA/gates, moved to merge — but the coder produced zero code. No commits on the feature branch, no commits on master. The entire agent session was a no-op. This is different from the "committed to master instead of worktree" problem — in this case, the coder simply did nothing. Need to investigate the coder logs to understand what happened. The empty-diff merge check would catch this at merge time, but ideally the server should detect "coder finished with no commits on feature branch" at the gate-check stage and fail early.
## 2026-03-19: Auto-assign assigns mergemaster to coding-stage stories
Auto-assign picked mergemaster for story 310 which was in `2_current/`. Mergemaster should only work on stories in `4_merge/`. The `auto_assign_available_work` function doesn't enforce that the agent's configured stage matches the pipeline stage of the story it's being assigned to. Story 279 (auto-assign respects agent stage from front matter) was supposed to fix this, but the check may only apply to front-matter preferences, not the fallback assignment path.
@@ -25,45 +25,6 @@ path = "."
setup = ["mkdir -p frontend/dist", "cargo check"]
teardown = []
[[agent]]
name = "supervisor"
stage = "other"
role = "Coordinates work, reviews PRs, decomposes stories."
model = "opus"
max_turns = 200
max_budget_usd = 15.00
prompt = """You are the supervisor for story {{story_id}}. Your job is to coordinate coder agents to implement this story.
Read CLAUDE.md first, then .story_kit/README.md to understand the dev process (SDTW). You are responsible for ensuring coders follow this process.
## Your MCP Tools
You have these tools via the story-kit MCP server:
- start_agent(story_id, agent_name) - Start a coder agent on a story
- wait_for_agent(story_id, agent_name, timeout_ms) - Block until the agent reaches a terminal state (completed/failed). Returns final status including completion report with gates_passed.
- get_agent_output(story_id, agent_name, timeout_ms) - Poll agent output (returns recent events, call repeatedly)
- list_agents() - See all running agents and their status
- stop_agent(story_id, agent_name) - Stop a running agent
- get_story_todos(story_id) - Get unchecked acceptance criteria for a story in work/2_current/
- ensure_acceptance(story_id) - Check if a story passes acceptance gates
## Your Workflow
1. Read CLAUDE.md and .story_kit/README.md to understand the project and dev process
2. Read the story file from .story_kit/work/ to understand requirements
3. Move it to work/2_current/ if it is in work/1_backlog/
4. Start coder-1 on the story: call start_agent with story_id="{{story_id}}" and agent_name="coder-1"
5. Wait for completion: call wait_for_agent with story_id="{{story_id}}" and agent_name="coder-1". The server automatically runs acceptance gates (cargo clippy + tests) when the coder process exits. wait_for_agent returns when the coder reaches a terminal state.
6. Check the result: inspect the "completion" field in the wait_for_agent response if gates_passed is true, the work is done; if false, review the gate_output and decide whether to start a fresh coder.
7. If the agent gets stuck, stop it and start a fresh agent.
8. STOP here. Do NOT accept the story or merge to master. Report the status to the human for final review and acceptance.
## Rules
- Do NOT implement code yourself - delegate to coder agents
- Only run one coder at a time per story
- Focus on coordination, monitoring, and quality review
- Never accept stories or merge to master - that is the human's job
- Your job ends when the coder's completion report shows gates_passed=true and you have reported the result"""
system_prompt = "You are a supervisor agent. Read CLAUDE.md and .story_kit/README.md first to understand the project dev process. Use MCP tools to coordinate sub-agents. Never implement code directly - always delegate to coder agents and monitor their progress. Use wait_for_agent to block until the coder finishes — the server automatically runs acceptance gates when the agent process exits. Never accept stories or merge to master - get all gates green and report to the human."
[[agent]]
name = "coder-1"
stage = "coder"
@@ -72,7 +33,7 @@ model = "sonnet"
max_turns = 50
max_budget_usd = 5.00
prompt = "You are working in a git worktree on story {{story_id}}. Read CLAUDE.md first, then .story_kit/README.md to understand the dev process. The story details are in your prompt above. Follow the SDTW process through implementation and verification (Steps 1-3). The worktree and feature branch already exist - do not create them. Check .mcp.json for MCP tools. Do NOT accept the story or merge - commit your work and stop. If the user asks to review your changes, tell them to run: cd \"{{worktree_path}}\" && git difftool {{base_branch}}...HEAD\n\nIMPORTANT: Commit all your work before your process exits. The server will automatically run acceptance gates (cargo clippy + tests) when your process exits and advance the pipeline based on the results.\n\n## Bug Workflow: Root Cause First\nWhen working on bugs:\n1. Investigate the root cause before writing any fix. Use `git bisect` to find the breaking commit or `git log` to trace history. Read the relevant code before touching anything.\n2. Fix the root cause with a surgical, minimal change. Do NOT add new abstractions, wrappers, or workarounds when a targeted fix to the original code is possible.\n3. Write commit messages that explain what broke and why, not just what was changed.\n4. If you cannot determine the root cause after thorough investigation, document what you tried and why it was inconclusive — do not guess and ship a speculative fix."
system_prompt = "You are a full-stack engineer working autonomously in a git worktree. Follow the Story-Driven Test Workflow strictly. Run cargo clippy and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
system_prompt = "You are a full-stack engineer working autonomously in a git worktree. Follow the Story-Driven Test Workflow strictly. Run cargo clippy --all-targets --all-features and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
[[agent]]
name = "coder-2"
@@ -82,7 +43,7 @@ model = "sonnet"
max_turns = 50
max_budget_usd = 5.00
prompt = "You are working in a git worktree on story {{story_id}}. Read CLAUDE.md first, then .story_kit/README.md to understand the dev process. The story details are in your prompt above. Follow the SDTW process through implementation and verification (Steps 1-3). The worktree and feature branch already exist - do not create them. Check .mcp.json for MCP tools. Do NOT accept the story or merge - commit your work and stop. If the user asks to review your changes, tell them to run: cd \"{{worktree_path}}\" && git difftool {{base_branch}}...HEAD\n\nIMPORTANT: Commit all your work before your process exits. The server will automatically run acceptance gates (cargo clippy + tests) when your process exits and advance the pipeline based on the results.\n\n## Bug Workflow: Root Cause First\nWhen working on bugs:\n1. Investigate the root cause before writing any fix. Use `git bisect` to find the breaking commit or `git log` to trace history. Read the relevant code before touching anything.\n2. Fix the root cause with a surgical, minimal change. Do NOT add new abstractions, wrappers, or workarounds when a targeted fix to the original code is possible.\n3. Write commit messages that explain what broke and why, not just what was changed.\n4. If you cannot determine the root cause after thorough investigation, document what you tried and why it was inconclusive — do not guess and ship a speculative fix."
system_prompt = "You are a full-stack engineer working autonomously in a git worktree. Follow the Story-Driven Test Workflow strictly. Run cargo clippy and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
system_prompt = "You are a full-stack engineer working autonomously in a git worktree. Follow the Story-Driven Test Workflow strictly. Run cargo clippy --all-targets --all-features and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
[[agent]]
name = "coder-3"
@@ -92,7 +53,7 @@ model = "sonnet"
max_turns = 50
max_budget_usd = 5.00
prompt = "You are working in a git worktree on story {{story_id}}. Read CLAUDE.md first, then .story_kit/README.md to understand the dev process. The story details are in your prompt above. Follow the SDTW process through implementation and verification (Steps 1-3). The worktree and feature branch already exist - do not create them. Check .mcp.json for MCP tools. Do NOT accept the story or merge - commit your work and stop. If the user asks to review your changes, tell them to run: cd \"{{worktree_path}}\" && git difftool {{base_branch}}...HEAD\n\nIMPORTANT: Commit all your work before your process exits. The server will automatically run acceptance gates (cargo clippy + tests) when your process exits and advance the pipeline based on the results.\n\n## Bug Workflow: Root Cause First\nWhen working on bugs:\n1. Investigate the root cause before writing any fix. Use `git bisect` to find the breaking commit or `git log` to trace history. Read the relevant code before touching anything.\n2. Fix the root cause with a surgical, minimal change. Do NOT add new abstractions, wrappers, or workarounds when a targeted fix to the original code is possible.\n3. Write commit messages that explain what broke and why, not just what was changed.\n4. If you cannot determine the root cause after thorough investigation, document what you tried and why it was inconclusive — do not guess and ship a speculative fix."
system_prompt = "You are a full-stack engineer working autonomously in a git worktree. Follow the Story-Driven Test Workflow strictly. Run cargo clippy and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
system_prompt = "You are a full-stack engineer working autonomously in a git worktree. Follow the Story-Driven Test Workflow strictly. Run cargo clippy --all-targets --all-features and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
[[agent]]
name = "qa-2"
@@ -127,7 +88,7 @@ Read CLAUDE.md first, then .story_kit/README.md to understand the dev process.
- URL to visit in the browser
- Things to check in the UI
- curl commands to exercise relevant API endpoints
- Kill the test server when done: `pkill -f 'target.*story-kit' || true` (NEVER use `pkill -f story-kit` it kills the vite dev server)
- Kill the test server when done: `pkill -f 'target.*storkit' || true` (NEVER use `pkill -f storkit` it kills the vite dev server)
### 4. Produce Structured Report
Print your QA report to stdout before your process exits. The server will automatically run acceptance gates. Use this format:
@@ -169,7 +130,7 @@ model = "opus"
max_turns = 80
max_budget_usd = 20.00
prompt = "You are working in a git worktree on story {{story_id}}. Read CLAUDE.md first, then .story_kit/README.md to understand the dev process. The story details are in your prompt above. Follow the SDTW process through implementation and verification (Steps 1-3). The worktree and feature branch already exist - do not create them. Check .mcp.json for MCP tools. Do NOT accept the story or merge - commit your work and stop. If the user asks to review your changes, tell them to run: cd \"{{worktree_path}}\" && git difftool {{base_branch}}...HEAD\n\nIMPORTANT: Commit all your work before your process exits. The server will automatically run acceptance gates (cargo clippy + tests) when your process exits and advance the pipeline based on the results.\n\n## Bug Workflow: Root Cause First\nWhen working on bugs:\n1. Investigate the root cause before writing any fix. Use `git bisect` to find the breaking commit or `git log` to trace history. Read the relevant code before touching anything.\n2. Fix the root cause with a surgical, minimal change. Do NOT add new abstractions, wrappers, or workarounds when a targeted fix to the original code is possible.\n3. Write commit messages that explain what broke and why, not just what was changed.\n4. If you cannot determine the root cause after thorough investigation, document what you tried and why it was inconclusive — do not guess and ship a speculative fix."
system_prompt = "You are a senior full-stack engineer working autonomously in a git worktree. You handle complex tasks requiring deep architectural understanding. Follow the Story-Driven Test Workflow strictly. Run cargo clippy and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
system_prompt = "You are a senior full-stack engineer working autonomously in a git worktree. You handle complex tasks requiring deep architectural understanding. Follow the Story-Driven Test Workflow strictly. Run cargo clippy --all-targets --all-features and biome checks before considering work complete. Commit all your work before finishing - use a descriptive commit message. Do not accept stories, move them to archived, or merge to master - a human will do that. Do not coordinate with other agents - focus on your assigned story. The server automatically runs acceptance gates when your process exits. For bugs, always find and fix the root cause. Use git bisect to find breaking commits. Do not layer new code on top of existing code when a surgical fix is possible. If root cause is unclear after investigation, document what you tried rather than guessing."
[[agent]]
name = "qa"
@@ -204,7 +165,7 @@ Read CLAUDE.md first, then .story_kit/README.md to understand the dev process.
- URL to visit in the browser
- Things to check in the UI
- curl commands to exercise relevant API endpoints
- Kill the test server when done: `pkill -f 'target.*story-kit' || true` (NEVER use `pkill -f story-kit` it kills the vite dev server)
- Kill the test server when done: `pkill -f 'target.*storkit' || true` (NEVER use `pkill -f storkit` it kills the vite dev server)
### 4. Produce Structured Report
Print your QA report to stdout before your process exits. The server will automatically run acceptance gates. Use this format:
+44
View File
@@ -0,0 +1,44 @@
# Slack Integration Setup
## Bot Configuration
Slack integration is configured via `bot.toml` in the project's `.story_kit/` directory:
```toml
transport = "slack"
display_name = "Storkit"
slack_bot_token = "xoxb-..."
slack_signing_secret = "..."
slack_channel_ids = ["C01ABCDEF"]
```
## Slack App Configuration
### Event Subscriptions
1. In your Slack app settings, enable **Event Subscriptions**.
2. Set the **Request URL** to: `https://<your-host>/webhook/slack`
3. Subscribe to the `message.channels` and `message.im` bot events.
### Slash Commands
Slash commands provide quick access to pipeline commands without mentioning the bot.
1. In your Slack app settings, go to **Slash Commands**.
2. Create the following commands, all pointing to the same **Request URL**: `https://<your-host>/webhook/slack/command`
| Command | Description |
|---------|-------------|
| `/storkit-status` | Show pipeline status and agent availability |
| `/storkit-cost` | Show token spend: 24h total, top stories, and breakdown |
| `/storkit-show` | Display the full text of a work item (e.g. `/storkit-show 42`) |
| `/storkit-git` | Show git status: branch, changes, ahead/behind |
| `/storkit-htop` | Show system and agent process dashboard |
All slash command responses are **ephemeral** — only the user who invoked the command sees the response.
### OAuth & Permissions
Required bot token scopes:
- `chat:write` — send messages
- `commands` — handle slash commands
@@ -118,8 +118,8 @@ To support both Remote and Local models, the system implements a `ModelProvider`
Multiple instances can run simultaneously in different worktrees. To avoid port conflicts:
- **Backend:** Set `STORYKIT_PORT` to a unique port (default is 3001). Example: `STORYKIT_PORT=3002 cargo run`
- **Frontend:** Run `npm run dev` from `frontend/`. It auto-selects the next unused port. It reads `STORYKIT_PORT` to know which backend to talk to, so export it before running: `export STORYKIT_PORT=3002 && cd frontend && npm run dev`
- **Backend:** Set `STORKIT_PORT` to a unique port (default is 3001). Example: `STORKIT_PORT=3002 cargo run`
- **Frontend:** Run `npm run dev` from `frontend/`. It auto-selects the next unused port. It reads `STORKIT_PORT` to know which backend to talk to, so export it before running: `export STORKIT_PORT=3002 && cd frontend && npm run dev`
When running in a worktree, use a port that won't conflict with the main instance (3001). Ports 3002+ are good choices.
@@ -0,0 +1,24 @@
---
name: "Web UI OAuth flow for Claude authentication"
---
# Story 368: Web UI OAuth flow for Claude authentication
## User Story
As a new user running storkit in Docker, I want to authenticate Claude through the web UI instead of running `claude login` in a terminal inside the container, so that the entire setup experience stays in the browser after `docker compose up`.
## Acceptance Criteria
- [ ] Backend exposes /auth/start endpoint that generates the Claude OAuth URL with redirect_uri pointing to localhost:3001
- [ ] Backend exposes /auth/callback endpoint that receives the OAuth token and stores it where Claude Code expects it
- [ ] Backend exposes /auth/status endpoint that reports whether valid Claude credentials exist
- [ ] Frontend shows a setup screen when no Claude auth is detected on first visit
- [ ] Setup screen has a 'Connect Claude Account' button that initiates the OAuth flow
- [ ] OAuth redirect returns to the web UI which confirms success and dismisses the setup screen
- [ ] Credentials are persisted in the claude-state Docker volume so they survive container restarts
- [ ] The entire flow works without any terminal interaction after docker compose up
## Out of Scope
- TBD
@@ -0,0 +1,34 @@
---
name: "CLI treats --help and --version as project paths"
---
# Bug 369: CLI treats --help and --version as project paths
## Description
When running `storkit <anything>`, the binary treats the first argument as a project path, creates a directory for it, and scaffolds `.storkit/` inside. This happens for `--help`, `--version`, `serve`, `x`, or any other string. There is no validation that the argument is an existing directory or a reasonable path before creating it.
## How to Reproduce
1. Run `storkit --help` or `storkit serve` or `storkit x` in any directory
2. Observe that a directory with that name is created with a full `.storkit/` scaffold inside it
## Actual Result
Any argument is treated as a project path and a directory is created and scaffolded. No flags are recognised.
## Expected Result
- `storkit --help` prints usage info and exits
- `storkit --version` prints the version and exits
- `storkit <path>` only works if the path already exists as a directory
- If the path does not exist, storkit prints a clear error and exits non-zero
## Acceptance Criteria
- [ ] storkit --help prints usage information and exits with code 0
- [ ] storkit --version prints the version and exits with code 0
- [ ] storkit -h and storkit -V work as short aliases
- [ ] storkit does not create directories for any argument — the path must already exist
- [ ] If the path does not exist, storkit prints a clear error and exits non-zero
- [ ] Arguments starting with - that are not recognised produce a clear error message
@@ -0,0 +1,33 @@
---
name: "Scaffold does not create .mcp.json in project root"
---
# Bug 370: Scaffold does not create .mcp.json in project root
## Description
Two related problems with project setup:
1. When the user clicks the "project setup" button in the web UI to open a new project, the scaffold does not reliably run — the `.storkit/` directory and associated files may not be created.
2. Even when the scaffold does run, it does not write `.mcp.json` to the project root. Without this file, agents spawned in worktrees cannot find the MCP server, causing `--permission-prompt-tool mcp__storkit__prompt_permission not found` errors and agent failures.
## How to Reproduce
1. Open the storkit web UI and use the project setup button to open a new project directory
2. Check whether the full scaffold was created (`.storkit/`, `CLAUDE.md`, `script/test`, etc.)
3. Check the project root for `.mcp.json`
## Actual Result
The scaffold may not run when using the UI project setup flow. When it does run, `.mcp.json` is not created in the project root. Agents fail because MCP tools are unavailable.
## Expected Result
Clicking the project setup button reliably runs the full scaffold, including `.mcp.json` pointing to the server's port.
## Acceptance Criteria
- [ ] The web UI project setup button triggers the full scaffold for new projects
- [ ] scaffold_story_kit writes .mcp.json to the project root with the server's port
- [ ] Existing .mcp.json is not overwritten if already present
- [ ] .mcp.json is included in .gitignore since the port is environment-specific
@@ -10,7 +10,7 @@ The `prompt_permission` MCP tool returns plain text ("Permission granted for '..
## How to Reproduce
1. Start the story-kit server and open the web UI
1. Start the storkit server and open the web UI
2. Chat with the claude-code-pty model
3. Ask it to do something that requires a tool NOT in `.claude/settings.json` allow list (e.g. `wc -l /etc/hosts`, or WebFetch to a non-allowed domain)
4. The permission dialog appears — click Approve
@@ -6,7 +6,7 @@ name: "Retry limit for mergemaster and pipeline restarts"
## User Story
As a developer using story-kit, I want pipeline auto-restarts to have a configurable retry limit so that failing agents don't loop infinitely consuming CPU and API credits.
As a developer using storkit, I want pipeline auto-restarts to have a configurable retry limit so that failing agents don't loop infinitely consuming CPU and API credits.
## Acceptance Criteria
@@ -23,7 +23,7 @@ The watcher should periodically check `5_done/` and move items older than 4 hour
- All MCP tools and pipeline logic that reference `5_archived` need updating to use `5_done`
- Frontend pipeline display if it shows archived/done items
- `.story_kit/README.md`: update pipeline stage documentation
- Story 116's init scaffolding: `story-kit init` must create `5_done/` and `6_archived/` directories
- Story 116's init scaffolding: `storkit init` must create `5_done/` and `6_archived/` directories
- Any templates or scaffold code that creates the `.story_kit/work/` directory structure
## Acceptance Criteria
@@ -35,7 +35,7 @@ The watcher should periodically check `5_done/` and move items older than 4 hour
- [ ] Existing items in old `5_archived/` are migrated to `6_archived/`
- [ ] Frontend pipeline display updated if applicable
- [ ] `.story_kit/README.md` updated to reflect the new pipeline stages
- [ ] `story-kit init` scaffolding creates `5_done/` and `6_archived/` (coordinate with story 116)
- [ ] `storkit init` scaffolding creates `5_done/` and `6_archived/` (coordinate with story 116)
## Out of Scope
@@ -17,21 +17,21 @@ const TEMPLATE_MARKER_CONTEXT: &str = "Agentic AI Code Assistant";
const TEMPLATE_MARKER_STACK: &str = "Agentic Code Assistant";
```
These markers are phrases that appear in the scaffold templates (`server/src/io/fs.rs` lines 233 and 269). The detection logic (`is_template_or_missing` at line 59) checks if the file *contains* the marker string. But these phrases are generic enough that real project content can contain them too — especially when the project being managed IS an agentic code assistant (i.e. story-kit managing itself).
These markers are phrases that appear in the scaffold templates (`server/src/io/fs.rs` lines 233 and 269). The detection logic (`is_template_or_missing` at line 59) checks if the file *contains* the marker string. But these phrases are generic enough that real project content can contain them too — especially when the project being managed IS an agentic code assistant (i.e. storkit managing itself).
## The Fix
Replace the content-based marker detection with a dedicated sentinel comment that only exists in untouched scaffold templates. The sentinel should be something that would never appear in real content, like an HTML comment:
```
<!-- story-kit:scaffold-template -->
<!-- storkit:scaffold-template -->
```
Changes needed:
1. **`server/src/io/onboarding.rs`**: Replace `TEMPLATE_MARKER_CONTEXT` and `TEMPLATE_MARKER_STACK` with a single `TEMPLATE_SENTINEL` constant set to `"<!-- story-kit:scaffold-template -->"`. Update `check_onboarding_status` to use it for both context and stack checks.
1. **`server/src/io/onboarding.rs`**: Replace `TEMPLATE_MARKER_CONTEXT` and `TEMPLATE_MARKER_STACK` with a single `TEMPLATE_SENTINEL` constant set to `"<!-- storkit:scaffold-template -->"`. Update `check_onboarding_status` to use it for both context and stack checks.
2. **`server/src/io/fs.rs`**: Add `<!-- story-kit:scaffold-template -->` as the first line of both `STORY_KIT_CONTEXT` and `STORY_KIT_STACK` template constants (lines 233 and 269).
2. **`server/src/io/fs.rs`**: Add `<!-- storkit:scaffold-template -->` as the first line of both `STORY_KIT_CONTEXT` and `STORY_KIT_STACK` template constants (lines 233 and 269).
3. **`server/src/io/onboarding.rs` tests**: Update the test `needs_onboarding_true_when_specs_contain_scaffold_markers` to use the sentinel instead of the old marker phrases. Also add a test confirming that content containing "Agentic AI Code Assistant" WITHOUT the sentinel does NOT trigger onboarding.
@@ -42,7 +42,7 @@ Changes needed:
## Acceptance Criteria
- [ ] Scaffold templates contain the sentinel `<!-- story-kit:scaffold-template -->` as first line
- [ ] Scaffold templates contain the sentinel `<!-- storkit:scaffold-template -->` as first line
- [ ] `needs_onboarding()` returns false for projects whose specs contain "Agentic AI Code Assistant" but NOT the sentinel
- [ ] `needs_onboarding()` returns true for untouched scaffold content (which contains the sentinel)
- [ ] Existing tests updated and passing

Some files were not shown because too many files have changed in this diff Show More