348 Commits

Author SHA1 Message Date
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
Dave
8074e3b420 fix: suppress unused variable TS errors that block release build
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:43:42 +00:00
Dave
8a6eeacb5e fix: suppress unused variable TS errors that block release build
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:41:04 +00:00
Dave
eb9707d8b6 story-kit: done 311_story_server_enforced_retry_limits_for_failed_merge_and_empty_diff_stories 2026-03-19 16:36:21 +00:00
Dave
3b887e3085 story-kit: merge 311_story_server_enforced_retry_limits_for_failed_merge_and_empty_diff_stories 2026-03-19 16:36:18 +00:00
Dave
662e00f94a fix: biome formatting and lint fixes in App.tsx and TokenUsagePage.tsx
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:14:44 +00:00
Dave
932325744c fix: return arrays for list endpoints in test fetch mock
Prevents "agentList is not iterable" warnings in test output.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:09:02 +00:00
Dave
3ced187aaa fix: mock fetch in test setup to suppress URL parse errors in jsdom
Also set jsdom base URL to http://localhost:3000 in vitest config.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:07:56 +00:00
Dave
64f73e24bf story-kit: done 310_story_bot_delete_command_removes_a_story_from_the_pipeline 2026-03-19 16:05:03 +00:00
Dave
c4282ab2fa story-kit: merge 310_story_bot_delete_command_removes_a_story_from_the_pipeline 2026-03-19 16:05:00 +00:00
Dave
a23fe71232 story-kit: accept 307_story_configurable_coder_pool_size_and_default_model_in_project_toml 2026-03-19 16:01:38 +00:00
Dave
84b1c24073 story-kit: done 307_story_configurable_coder_pool_size_and_default_model_in_project_toml 2026-03-19 16:00:37 +00:00
Dave
429597cbce story-kit: merge 307_story_configurable_coder_pool_size_and_default_model_in_project_toml 2026-03-19 16:00:35 +00:00
Dave
101b365354 story-kit: accept 309_story_show_token_cost_breakdown_in_expanded_work_item_detail_panel 2026-03-19 15:55:39 +00:00
Dave
ca3d5ee7a6 story-kit: create 312_bug_auto_assign_assigns_mergemaster_to_coding_stage_stories 2026-03-19 15:49:38 +00:00
Dave
4af9507764 story-kit: create 312_bug_auto_assign_assigns_mergemaster_to_coding_stage_stories 2026-03-19 15:48:41 +00:00
Dave
b71e8dd2be story-kit: create 310_story_bot_delete_command_removes_a_story_from_the_pipeline 2026-03-19 15:43:11 +00:00
Dave
a6621a7095 story-kit: done 309_story_show_token_cost_breakdown_in_expanded_work_item_detail_panel 2026-03-19 15:42:50 +00:00
Dave
ce380ffb52 story-kit: merge 309_story_show_token_cost_breakdown_in_expanded_work_item_detail_panel 2026-03-19 15:42:47 +00:00
Dave
be9c15efe0 story-kit: create 311_story_server_enforced_retry_limits_for_failed_merge_and_empty_diff_stories 2026-03-19 15:42:23 +00:00
Dave
76e3bf952e story-kit: accept 298_story_bot_htop_command_with_live_updating_process_dashboard 2026-03-19 15:33:32 +00:00
Dave
d6858b690b story-kit: done 306_story_replace_manual_qa_boolean_with_configurable_qa_mode_field 2026-03-19 11:58:50 +00:00
Dave
2067abb2e5 story-kit: merge 306_story_replace_manual_qa_boolean_with_configurable_qa_mode_field 2026-03-19 11:58:47 +00:00
Dave
a058fa5f19 story-kit: create 310_story_bot_delete_command_removes_a_story_from_the_pipeline 2026-03-19 11:57:28 +00:00
Dave
62c2c531e6 story-kit: create 309_story_show_token_cost_breakdown_in_expanded_work_item_detail_panel 2026-03-19 11:55:12 +00:00
Dave
f266bb1d03 story-kit: create 308_bug_token_cost_breakdown_missing_from_expanded_work_item_detail_panel 2026-03-19 11:54:05 +00:00
Dave
7c9261da41 story-kit: create 307_story_configurable_coder_pool_size_and_default_model_in_project_toml 2026-03-19 11:42:35 +00:00
Dave
0eac4ca966 story-kit: done 303_story_bot_cost_command_with_story_filter_for_detailed_breakdown 2026-03-19 11:40:57 +00:00
Dave
a70f6b01e0 story-kit: create 307_story_configurable_coder_pool_size_and_default_model_in_project_toml 2026-03-19 11:39:57 +00:00
Dave
4545b57160 story-kit: done 301_story_dedicated_token_usage_page_in_web_ui 2026-03-19 11:36:16 +00:00
Dave
a6ac6497e9 story-kit: merge 301_story_dedicated_token_usage_page_in_web_ui 2026-03-19 11:36:12 +00:00
Dave
586d06b840 story-kit: create 306_story_replace_manual_qa_boolean_with_configurable_qa_mode_field 2026-03-19 11:30:19 +00:00
Dave
c67f148383 story-kit: done 305_story_bot_show_command_displays_story_text_in_chat 2026-03-19 11:12:37 +00:00
Dave
f88114edbf story-kit: merge 305_story_bot_show_command_displays_story_text_in_chat 2026-03-19 11:12:35 +00:00
Dave
08c7a92d74 story-kit: done 300_story_show_token_cost_badge_on_pipeline_board_work_items 2026-03-19 11:02:14 +00:00
Dave
36535b639f story-kit: merge 300_story_show_token_cost_badge_on_pipeline_board_work_items 2026-03-19 11:02:12 +00:00
Dave
b6f99ce7a2 story-kit: done 304_story_mcp_tool_to_move_stories_between_pipeline_stages 2026-03-19 10:59:50 +00:00
Dave
f4376b01e1 story-kit: merge 304_story_mcp_tool_to_move_stories_between_pipeline_stages 2026-03-19 10:59:47 +00:00
Dave
e7aa4e028e story-kit: create 305_story_bot_show_command_displays_story_text_in_chat 2026-03-19 10:56:25 +00:00
Dave
52c5cc9b72 story-kit: done 302_story_bot_cost_command_shows_total_and_per_story_token_spend 2026-03-19 10:54:09 +00:00
Dave
c327263254 story-kit: merge 302_story_bot_cost_command_shows_total_and_per_story_token_spend 2026-03-19 10:54:04 +00:00
Dave
7c9b86c31b story-kit: create 304_story_mcp_tool_to_move_stories_between_pipeline_stages 2026-03-19 10:44:14 +00:00
Dave
a2c893420b story-kit: create 304_story_mcp_tool_to_move_stories_between_pipeline_stages 2026-03-19 10:43:10 +00:00
Dave
a1fe5356cf story-kit: create 301_story_dedicated_token_usage_page_in_web_ui 2026-03-19 10:41:49 +00:00
Dave
1477fbc02b story-kit: create 303_story_bot_cost_command_with_story_filter_for_detailed_breakdown 2026-03-19 10:40:42 +00:00
Dave
6a74eefd07 chore: gitignore token_usage.jsonl
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:35:37 +00:00
Dave
981fd3fd81 story-kit: merge 298_story_bot_htop_command_with_live_updating_process_dashboard
Adds htop bot command with live-updating Matrix message showing system
load and per-agent CPU/memory usage. Supports timeout override and
htop stop. Resolved conflict with git command in commands.rs registry.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:33:21 +00:00
Dave
99d301b467 story-kit: done 298_story_bot_htop_command_with_live_updating_process_dashboard 2026-03-19 10:29:35 +00:00
Dave
9ed80384d5 story-kit: create 302_story_bot_cost_command_shows_total_and_per_story_token_spend 2026-03-19 10:14:01 +00:00
Dave
c2cda92337 story-kit: done 299_story_bot_git_status_command_shows_working_tree_and_branch_info 2026-03-19 10:11:30 +00:00
Dave
b25ae42737 story-kit: merge 299_story_bot_git_status_command_shows_working_tree_and_branch_info 2026-03-19 10:11:28 +00:00
Dave
7811130a8b story-kit: create 300_story_show_token_cost_badge_on_pipeline_board_work_items 2026-03-19 10:10:27 +00:00
Dave
ec212cb5a2 story-kit: create 303_story_bot_cost_command_with_story_filter_for_detailed_breakdown 2026-03-19 10:08:57 +00:00
Dave
d174bb41e7 story-kit: create 302_story_bot_cost_command_shows_total_and_per_story_token_spend 2026-03-19 10:08:48 +00:00
Dave
40570888ff story-kit: create 301_story_dedicated_token_usage_page_in_web_ui 2026-03-19 10:08:35 +00:00
Dave
dd75e9e0fa story-kit: create 300_story_show_token_cost_badge_on_pipeline_board_work_items 2026-03-19 10:08:26 +00:00
Dave
c2aa9ef134 story-kit: accept 295_bug_stories_stuck_in_qa_when_qa_agent_is_busy 2026-03-19 09:58:55 +00:00
Dave
501d6d31ff story-kit: create 299_story_bot_git_status_command_shows_working_tree_and_branch_info 2026-03-19 09:58:06 +00:00
Dave
db2f8fcfc5 story-kit: done 295_bug_stories_stuck_in_qa_when_qa_agent_is_busy 2026-03-19 09:57:32 +00:00
Dave
f325ddf9fe story-kit: done 296_story_track_per_agent_token_usage_for_cost_visibility_and_optimisation 2026-03-19 09:55:28 +00:00
Dave
9cdb0d4ea8 story-kit: merge 296_story_track_per_agent_token_usage_for_cost_visibility_and_optimisation 2026-03-19 09:55:25 +00:00
Dave
6c413e1fc7 fix: call auto_assign_available_work after every pipeline advance (bug 295)
Stories got stuck in QA/merge when agents were busy at assignment time.
Consolidates auto_assign into a single unconditional call at the end of
run_pipeline_advance, so whenever any agent completes, the system
immediately scans for pending work and assigns free agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:53:41 +00:00
Dave
28b29b55a8 story-kit: accept 294_story_rename_app_title_from_story_kit_to_storkit 2026-03-19 09:47:31 +00:00
Dave
376de57252 story-kit: done 294_story_rename_app_title_from_story_kit_to_storkit 2026-03-19 09:46:31 +00:00
Dave
63f46751ac story-kit: merge 294_story_rename_app_title_from_story_kit_to_storkit 2026-03-19 09:46:28 +00:00
Dave
dc9df6d497 story-kit: create 298_story_bot_htop_command_with_live_updating_process_dashboard 2026-03-19 09:41:26 +00:00
Dave
ae7b04fac5 story-kit: create 298_story_bot_htop_command_with_live_updating_process_dashboard 2026-03-19 09:39:38 +00:00
Dave
50959e6b67 story-kit: done 297_story_improve_bot_status_command_formatting 2026-03-19 09:39:08 +00:00
Dave
6353b12c1d story-kit: merge 297_story_improve_bot_status_command_formatting 2026-03-19 09:39:05 +00:00
Dave
170fd53808 story-kit: create 296_story_track_per_agent_token_usage_for_cost_visibility_and_optimisation 2026-03-19 09:37:21 +00:00
Dave
597e6bf1c3 story-kit: create 298_story_bot_htop_command_with_live_updating_process_dashboard 2026-03-19 09:36:14 +00:00
Dave
7a5a56f211 story-kit: create 297_story_improve_bot_status_command_formatting 2026-03-19 09:26:32 +00:00
Dave
73c86b6946 story-kit: merge 293_story_register_all_bot_commands_in_the_command_registry
Moves status, ambient, and help commands into a unified command registry
in commands.rs. Help output now automatically lists all registered
commands. Resolved merge conflict with 1_backlog rename.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:14:04 +00:00
Dave
11afd21f17 story-kit: create 296_story_track_per_agent_token_usage_for_cost_visibility_and_optimisation 2026-03-19 09:03:46 +00:00
Dave
1d20cfc679 story-kit: create 296_story_track_per_agent_token_usage_for_cost_visibility_and_optimisation 2026-03-19 08:59:46 +00:00
Dave
959c680e10 story-kit: accept 293_story_register_all_bot_commands_in_the_command_registry 2026-03-19 08:37:52 +00:00
Dave
dd377de7db story-kit: done 293_story_register_all_bot_commands_in_the_command_registry 2026-03-19 08:37:47 +00:00
Dave
9fee4d9478 story-kit: accept 292_story_show_server_logs_in_web_ui 2026-03-19 01:32:28 +00:00
Dave
40c04fcb28 story-kit: done 292_story_show_server_logs_in_web_ui 2026-03-19 01:31:28 +00:00
Dave
2f0d796b38 story-kit: merge 292_story_show_server_logs_in_web_ui 2026-03-19 01:31:25 +00:00
Dave
2346602b30 fix: default manual_qa to false so stories advance automatically
Bug 283 was implemented with manual_qa defaulting to true, causing all
stories to hold in QA for human review. Changed to default false as
originally specified — stories advance automatically unless explicitly
opted in with manual_qa: true.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 00:53:00 +00:00
Dave
13c0ee4c08 story-kit: create 295_bug_stories_stuck_in_qa_when_qa_agent_is_busy 2026-03-18 21:24:11 +00:00
Dave
483dca5b95 story-kit: create 295_bug_stories_stuck_in_qa_when_qa_agent_is_busy 2026-03-18 21:23:04 +00:00
Dave
dc7d070101 story-kit: create 294_story_rename_app_title_from_story_kit_to_storkit 2026-03-18 20:43:09 +00:00
Dave
875d1f88aa story-kit: accept 291_story_show_test_results_in_work_item_detail_panel 2026-03-18 20:39:16 +00:00
Dave
f550018987 Updated toml to 1.0.7 2026-03-18 16:38:16 +00:00
Dave
52ec989c3a Fixed some bot tests. 2026-03-18 16:37:23 +00:00
Dave
d080e8b12d story-kit: accept 273_story_matrix_bot_sends_typing_indicator_while_waiting_for_claude_response 2026-03-18 16:11:51 +00:00
Dave
cfd85d3a0e story-kit: accept 284_story_matrix_bot_status_command_shows_pipeline_and_agent_availability 2026-03-18 16:06:45 +00:00
Dave
070d53068e story-kit: accept 283_bug_pipeline_does_not_check_manual_qa_flag_before_advancing_from_qa_to_merge 2026-03-18 16:00:44 +00:00
Dave
fa8e0f39f6 story-kit: create 293_story_register_all_bot_commands_in_the_command_registry 2026-03-18 15:57:14 +00:00
Dave
503fa6b7bf fix: rename remaining 1_upcoming references to 1_backlog in bot.rs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:53:36 +00:00
Dave
51a0fb8297 story-kit: accept 282_story_matrix_bot_ambient_mode_toggle_via_chat_command 2026-03-18 15:52:35 +00:00
Dave
8ac85a0b67 chore: commit pending changes from session
- Add permission rules to .claude/settings.json
- Document empty merge and direct-to-master problems in problems.md
- Fix agent stream URL to use vite proxy instead of hardcoded host
- Add /agents proxy config to vite.config.ts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:50:20 +00:00
Dave
aa4e042e32 story-kit: done 247_story_human_qa_gate_with_rejection_flow 2026-03-18 15:47:51 +00:00
Dave
9352443555 story-kit: merge 247_story_human_qa_gate_with_rejection_flow 2026-03-18 15:47:48 +00:00
Dave
1faacd7812 story-kit: done 291_story_show_test_results_in_work_item_detail_panel 2026-03-18 15:43:41 +00:00
Dave
7451cb7170 story-kit: done 290_story_show_agent_output_stream_in_expanded_work_item_detail_panel 2026-03-18 15:32:01 +00:00
Dave
83ccfece81 story-kit: merge 290_story_show_agent_output_stream_in_expanded_work_item_detail_panel 2026-03-18 15:31:58 +00:00
Dave
68bf179407 story-kit: create 292_story_show_server_logs_in_web_ui 2026-03-18 15:27:56 +00:00
Dave
c35c05d02c story-kit: done 289_bug_rebuild_and_restart_mcp_tool_does_not_rebuild 2026-03-18 15:27:37 +00:00
Dave
3adae6c475 story-kit: merge 289_bug_rebuild_and_restart_mcp_tool_does_not_rebuild 2026-03-18 15:27:29 +00:00
Dave
c4753b51de story-kit: accept 281_story_matrix_bot_announces_itself_when_it_comes_online 2026-03-18 15:26:36 +00:00
Dave
e7a73e7322 story-kit: done 284_story_matrix_bot_status_command_shows_pipeline_and_agent_availability 2026-03-18 15:22:34 +00:00
Dave
e8ec84668f story-kit: merge 284_story_matrix_bot_status_command_shows_pipeline_and_agent_availability 2026-03-18 15:22:19 +00:00
Dave
8d9cf4b283 story-kit: create 291_story_show_test_results_in_work_item_detail_panel 2026-03-18 15:18:47 +00:00
Dave
a8cb38fe27 story-kit: done 273_story_matrix_bot_sends_typing_indicator_while_waiting_for_claude_response 2026-03-18 15:17:50 +00:00
Dave
dd83e0f4ee fix: biome formatting in Chat.test.tsx and ChatInput.tsx
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:07:49 +00:00
Dave
3923aafb71 story-kit: done 288_bug_ambient_mode_state_lost_on_server_restart 2026-03-18 15:01:44 +00:00
Dave
8fcfadcb04 story-kit: merge 288_bug_ambient_mode_state_lost_on_server_restart 2026-03-18 15:01:40 +00:00
Dave
7c023c6beb story-kit: done 285_story_matrix_bot_help_command_lists_available_bot_commands 2026-03-18 14:57:30 +00:00
Dave
e7bb8db7c1 story-kit: merge 285_story_matrix_bot_help_command_lists_available_bot_commands 2026-03-18 14:57:27 +00:00
Dave
727da0c6d0 story-kit: create 290_story_show_agent_output_stream_in_expanded_work_item_detail_panel 2026-03-18 14:50:35 +00:00
Dave
257ee05ac6 story-kit: accept 266_story_matrix_bot_structured_conversation_history 2026-03-18 14:49:40 +00:00
Dave
b9f3505738 story-kit: create 289_bug_rebuild_and_restart_mcp_tool_does_not_rebuild 2026-03-18 14:42:24 +00:00
Dave
be56792c6e story-kit: create 289_bug_rebuild_and_restart_mcp_tool_does_not_rebuild 2026-03-18 14:41:46 +00:00
Dave
9daaae2d43 story-kit: create 288_bug_ambient_mode_state_lost_on_server_restart 2026-03-18 14:37:16 +00:00
Dave
c85d02a3ef story-kit: done 287_story_rename_upcoming_pipeline_stage_to_backlog 2026-03-18 14:33:11 +00:00
Dave
df6f792214 story-kit: merge 287_story_rename_upcoming_pipeline_stage_to_backlog 2026-03-18 14:33:08 +00:00
Dave
967ebd7a84 story-kit: accept 271_story_show_assigned_agent_in_expanded_work_item_view 2026-03-18 14:30:43 +00:00
Dave
3bc44289b9 story-kit: accept 279_story_auto_assign_should_respect_agent_stage_when_front_matter_specifies_agent 2026-03-18 14:18:28 +00:00
Dave
17f6bae573 story-kit: done 286_story_server_self_rebuild_and_restart_via_mcp_tool 2026-03-18 14:09:13 +00:00
Dave
baa8bdcfda story-kit: merge 286_story_server_self_rebuild_and_restart_via_mcp_tool 2026-03-18 14:09:09 +00:00
Dave
33492c49fa fix: QA agents must not pkill -f story-kit (kills vite dev server)
Change pkill pattern to 'target.*story-kit' to only match the Rust
binary, not any process with story-kit in its working directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:08:07 +00:00
Dave
63a90195e7 Update Cargo.lock version to 0.3.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 14:06:58 +00:00
Dave
7bd390c762 story-kit: accept 92_spike_stop_auto_committing_intermediate_pipeline_moves 2026-03-18 14:06:26 +00:00
Dave
0d581ab459 story-kit: accept 278_story_auto_assign_agents_to_pipeline_items_on_server_startup 2026-03-18 14:02:46 +00:00
Dave
42f88cc172 story-kit: create 287_story_rename_upcoming_pipeline_stage_to_backlog 2026-03-18 13:52:06 +00:00
Dave
945648bf6e story-kit: create 280_story_long_running_supervisor_agent_with_periodic_pipeline_polling 2026-03-18 13:51:32 +00:00
Dave
bc5a3da2c0 story-kit: create 286_story_server_self_rebuild_and_restart_via_mcp_tool 2026-03-18 13:43:54 +00:00
Dave
04e841643e story-kit: accept 274_story_mcp_pipeline_status_tool_with_agent_assignments 2026-03-18 13:25:50 +00:00
Dave
3d97b0b95a story-kit: done 285_story_matrix_bot_help_command_lists_available_bot_commands 2026-03-18 13:07:48 +00:00
Dave
8f4cb9475c story-kit: done 284_story_matrix_bot_status_command_shows_pipeline_and_agent_availability 2026-03-18 13:01:51 +00:00
Dave
8f63cfda07 story-kit: done 279_story_auto_assign_should_respect_agent_stage_when_front_matter_specifies_agent 2026-03-18 12:58:08 +00:00
Dave
1b3843d913 story-kit: done 278_story_auto_assign_agents_to_pipeline_items_on_server_startup 2026-03-18 12:50:48 +00:00
Dave
4c898996a2 story-kit: done 274_story_mcp_pipeline_status_tool_with_agent_assignments 2026-03-18 12:50:21 +00:00
Dave
281531624d story-kit: done 283_bug_pipeline_does_not_check_manual_qa_flag_before_advancing_from_qa_to_merge 2026-03-18 12:34:46 +00:00
Dave
b09a2cbdf9 story-kit: done 273_story_matrix_bot_sends_typing_indicator_while_waiting_for_claude_response 2026-03-18 12:30:30 +00:00
Dave
a0c1457757 story-kit: done 92_spike_stop_auto_committing_intermediate_pipeline_moves 2026-03-18 12:16:09 +00:00
Dave
e818ac986d story-kit: create 92_spike_stop_auto_committing_intermediate_pipeline_moves 2026-03-18 12:15:09 +00:00
Dave
b29f6628f8 story-kit: create 278_story_auto_assign_agents_to_pipeline_items_on_server_startup 2026-03-18 12:15:02 +00:00
Dave
4dc4fef83b story-kit: create 247_story_human_qa_gate_with_rejection_flow 2026-03-18 12:14:54 +00:00
Dave
7ef85c459c story-kit: create 279_story_auto_assign_should_respect_agent_stage_when_front_matter_specifies_agent 2026-03-18 12:13:36 +00:00
Dave
f6058a50b9 story-kit: create 274_story_mcp_pipeline_status_tool_with_agent_assignments 2026-03-18 12:13:20 +00:00
Dave
d347ba084d story-kit: done 282_story_matrix_bot_ambient_mode_toggle_via_chat_command 2026-03-18 12:12:26 +00:00
Dave
b50d007b40 story-kit: merge 282_story_matrix_bot_ambient_mode_toggle_via_chat_command 2026-03-18 12:12:19 +00:00
Dave
ed3d7311d1 story-kit: create 285_story_matrix_bot_help_command_lists_available_bot_commands 2026-03-18 12:06:34 +00:00
Dave
e7aef3edc7 story-kit: create 284_story_matrix_bot_status_command_shows_pipeline_and_agent_availability 2026-03-18 12:06:02 +00:00
Dave
d5a93fe726 story-kit: create 283_bug_pipeline_does_not_check_manual_qa_flag_before_advancing_from_qa_to_merge 2026-03-18 12:00:08 +00:00
482 changed files with 32543 additions and 13120 deletions

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,11 +54,20 @@
"WebFetch(domain:portkey.ai)",
"WebFetch(domain:www.shuttle.dev)",
"WebSearch",
"mcp__story-kit__*",
"mcp__storkit__*",
"Edit",
"Write",
"Bash(find *)",
"Bash(sqlite3 *)"
"Bash(sqlite3 *)",
"Bash(cat <<:*)",
"Bash(cat <<'ENDJSON:*)",
"Bash(make release:*)",
"Bash(npm test:*)",
"Bash(head *)",
"Bash(tail *)",
"Bash(wc *)",
"Bash(npx vite:*)",
"Bash(npm run dev:*)"
]
}
}

4
.gitignore vendored
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

View File

@@ -17,3 +17,6 @@ work/4_merge/
# Coverage reports (generated by cargo-llvm-cov, not tracked in git)
coverage/
# Token usage log (generated at runtime, contains cost data)
token_usage.jsonl

View File

@@ -11,14 +11,14 @@ 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":{}}'
```
This returns the full tool catalog (create stories, spawn agents, record tests, manage worktrees, etc.). Familiarize yourself with the available tools before proceeding. These tools allow you to directly manipulate the workflow and spawn subsidiary agents without manual file manipulation.
2. **Read Context:** Check `.story_kit/specs/00_CONTEXT.md` for high-level project goals.
3. **Read Stack:** Check `.story_kit/specs/tech/STACK.md` for technical constraints and patterns.
4. **Check Work Items:** Look at `.story_kit/work/1_upcoming/` and `.story_kit/work/2_current/` to see what work is pending.
4. **Check Work Items:** Look at `.story_kit/work/1_backlog/` and `.story_kit/work/2_current/` to see what work is pending.
---
@@ -52,7 +52,7 @@ project_root/
├── README.md # This document
├── project.toml # Agent configuration (roles, models, prompts)
├── work/ # Unified work item pipeline (stories, bugs, spikes)
│ ├── 1_upcoming/ # New work items awaiting implementation
│ ├── 1_backlog/ # New work items awaiting implementation
│ ├── 2_current/ # Work in progress
│ ├── 3_qa/ # QA review
│ ├── 4_merge/ # Ready to merge to master
@@ -78,7 +78,7 @@ All work items (stories, bugs, spikes) live in the same `work/` pipeline. Items
Items move through stages by moving the file between directories:
`1_upcoming``2_current``3_qa``4_merge``5_done``6_archived`
`1_backlog``2_current``3_qa``4_merge``5_done``6_archived`
Items in `5_done` are auto-swept to `6_archived` after 4 hours by the server.
@@ -87,7 +87,7 @@ Items in `5_done` are auto-swept to `6_archived` after 4 hours by the server.
The server watches `.story_kit/work/` for changes. When a file is created, moved, or modified, the watcher auto-commits with a deterministic message and broadcasts a WebSocket notification to the frontend. This means:
* MCP tools only need to write/move files — the watcher handles git commits
* IDE drag-and-drop works (drag a story from `1_upcoming/` to `2_current/`)
* IDE drag-and-drop works (drag a story from `1_backlog/` to `2_current/`)
* The frontend updates automatically without manual refresh
---
@@ -156,7 +156,7 @@ Not everything needs to be a full story. Simple bugs can skip the story process:
* Performance issues with known fixes
### Bug Process
1. **Document Bug:** Create a bug file in `work/1_upcoming/` named `{id}_bug_{slug}.md` with:
1. **Document Bug:** Create a bug file in `work/1_backlog/` named `{id}_bug_{slug}.md` with:
* **Symptom:** What the user observes
* **Root Cause:** Technical explanation (if known)
* **Reproduction Steps:** How to trigger the bug
@@ -186,7 +186,7 @@ Not everything needs a story or bug fix. Spikes are time-boxed investigations to
* Need to validate performance constraints
### Spike Process
1. **Document Spike:** Create a spike file in `work/1_upcoming/` named `{id}_spike_{slug}.md` with:
1. **Document Spike:** Create a spike file in `work/1_backlog/` named `{id}_spike_{slug}.md` with:
* **Question:** What you need to answer
* **Hypothesis:** What you expect to be true
* **Timebox:** Strict limit for the research
@@ -209,7 +209,7 @@ When the LLM context window fills up (or the chat gets slow/confused):
1. **Stop Coding.**
2. **Instruction:** Tell the user to open a new chat.
3. **Handoff:** The only context the new LLM needs is in the `specs/` folder and `.mcp.json`.
* *Prompt for New Session:* "I am working on Project X. Read `.mcp.json` to discover available tools, then read `specs/00_CONTEXT.md` and `specs/tech/STACK.md`. Then look at `work/1_upcoming/` and `work/2_current/` to see what is pending."
* *Prompt for New Session:* "I am working on Project X. Read `.mcp.json` to discover available tools, then read `specs/00_CONTEXT.md` and `specs/tech/STACK.md`. Then look at `work/1_backlog/` and `work/2_current/` to see what is pending."
---
@@ -221,7 +221,7 @@ If a user hands you this document and says "Apply this process to my project":
1. **Check for MCP Tools:** Look for `.mcp.json` in the project root. If it exists, you have programmatic access to workflow tools and agent spawning capabilities.
2. **Analyze the Request:** Ask for the high-level goal ("What are we building?") and the tech preferences ("Rust or Python?").
3. **Git Check:** Check if the directory is a git repository (`git status`). If not, run `git init`.
4. **Scaffold:** Run commands to create the `work/` and `specs/` folders with the 6-stage pipeline (`work/1_upcoming/` through `work/6_archived/`).
4. **Scaffold:** Run commands to create the `work/` and `specs/` folders with the 6-stage pipeline (`work/1_backlog/` through `work/6_archived/`).
5. **Draft Context:** Write `specs/00_CONTEXT.md` based on the user's answer.
6. **Draft Stack:** Write `specs/tech/STACK.md` based on best practices for that language.
7. **Wait:** Ask the user for "Story #1".

61
.storkit/bot.toml.example Normal file
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
.storkit/problems.md Normal file
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.

View File

@@ -1,3 +1,18 @@
# Project-wide default QA mode: "server", "agent", or "human".
# Per-story `qa` front matter overrides this setting.
default_qa = "server"
# Default model for coder agents. Only agents with this model are auto-assigned.
# Opus coders are reserved for explicit per-story `agent:` front matter requests.
default_coder_model = "sonnet"
# Maximum concurrent coder agents. Stories wait in 2_current/ when all slots are full.
max_coders = 3
# Maximum retries per story per pipeline stage before marking as blocked.
# Set to 0 to disable retry limits.
max_retries = 2
[[component]]
name = "frontend"
path = "frontend"
@@ -10,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_upcoming/
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"
@@ -69,6 +45,16 @@ 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."
[[agent]]
name = "coder-3"
stage = "coder"
role = "Full-stack engineer. Implements features across all components."
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."
[[agent]]
name = "qa-2"
stage = "qa"
@@ -102,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 story-kit || true`
- 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:
@@ -179,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 story-kit || true`
- 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:

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

View File

@@ -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.

View File

@@ -0,0 +1,21 @@
---
name: "Run storkit container under gVisor (runsc) runtime"
---
# Story 360: Run storkit container under gVisor (runsc) runtime
## User Story
As a storkit operator, I want the container to run under gVisor so that even if a malicious codebase escapes the container's process namespace, it cannot make raw syscalls to the host kernel.
## Acceptance Criteria
- [ ] docker-compose.yml specifies runtime: runsc
- [ ] PTY-based agent spawning (Claude Code via PTY) works correctly under runsc
- [ ] rebuild_and_restart (exec() replacement) works correctly under runsc
- [ ] Rust compilation inside the container completes successfully under runsc
- [ ] Document host setup requirement: runsc must be installed and registered in /etc/docker/daemon.json
## Out of Scope
- TBD

View File

@@ -0,0 +1,212 @@
---
name: "Evaluate Docker/OrbStack for agent isolation and resource limiting"
agent: "coder-opus"
---
# Spike 329: Evaluate Docker/OrbStack for agent isolation and resource limiting
## Question
Investigate running the entire storkit system (server, Matrix bot, agents, web UI) inside a single Docker container, using OrbStack as the macOS runtime for better performance. The goal is to isolate storkit from the host machine — not to isolate agents from each other.
**Important context:** Storkit developing itself is the dogfood edge case. The primary use case is storkit managing agents that develop *other* projects, driven by multiple users in chat rooms (Matrix, WhatsApp, Slack). Isolation must account for untrusted codebases, multi-user command surfaces, and running against arbitrary repos — not just the single-developer self-hosted setup.
Currently storkit runs as bare processes on the host with full filesystem and network access. A single container would provide:
1. **Host isolation** — storkit can't touch anything outside the container
2. **Clean install/uninstall**`docker run` to start, `docker rm` to remove
3. **Reproducible environment** — same container works on any machine
4. **Distributable product**`docker pull storkit` for new users
5. **Resource limits** — cap total CPU/memory for the whole system
## Architecture
```
Docker Container (single)
├── storkit server
│ ├── Matrix bot
│ ├── WhatsApp webhook
│ ├── Slack webhook
│ ├── Web UI
│ └── MCP server
├── Agent processes (coder-1, coder-2, coder-opus, qa, mergemaster)
├── Rust toolchain + Node.js + Claude Code CLI
└── /workspace (bind-mounted project repo from host)
```
## Key questions to answer:
- **Performance**: How much slower are cargo builds inside the container on macOS? Compare Docker Desktop vs OrbStack for bind-mounted volumes.
- **Dockerfile**: What's the minimal image for the full stack? Rust toolchain + Node.js + Claude Code CLI + cargo-nextest + git.
- **Bind mounts**: The project repo is bind-mounted from the host. Any filesystem performance concerns with OrbStack?
- **Networking**: Container exposes web UI port (3000). Matrix/WhatsApp/Slack connect outbound. Any issues?
- **API key**: Pass ANTHROPIC_API_KEY as env var to the container.
- **Git**: Git operations happen inside the container on the bind-mounted repo. Commits are visible on the host immediately.
- **Cargo cache**: Use a named Docker volume for ~/.cargo/registry so dependencies persist across container restarts.
- **Claude Code state**: Where does Claude Code store its session data? Needs to persist or be in a volume.
- **OrbStack vs Docker Desktop**: Is OrbStack required for acceptable performance, or does Docker Desktop work too?
- **Server restart**: Does `rebuild_and_restart` work inside a container (re-exec with new binary)?
## Deliverable:
A proof-of-concept Dockerfile, docker-compose.yml, and a short write-up with findings and performance benchmarks.
## Hypothesis
A single Docker container running the entire storkit stack (server + agents + toolchain) on OrbStack will provide acceptable performance for the primary use case (developing other projects) while giving us host isolation, resource limits, and a distributable product. OrbStack's VirtioFS should make bind-mounted filesystem performance close to native.
## Timebox
4 hours
## Investigation Plan
1. Audit storkit's runtime dependencies (Rust toolchain, Node.js, Claude Code CLI, cargo-nextest, git)
2. Determine where Claude Code stores session state (~/.claude)
3. Analyze how rebuild_and_restart works (exec() replacement) and whether it's container-compatible
4. Draft a multi-stage Dockerfile and docker-compose.yml
5. Document findings for each key question
6. Provide recommendation and follow-up stories
## Findings
### 1. Dockerfile: Minimal image for the full stack
**Result:** Multi-stage Dockerfile created at `docker/Dockerfile`.
The image requires these runtime components:
- **Rust 1.90+ toolchain** (~1.5 GB) — needed at runtime for `rebuild_and_restart` and agent-driven `cargo clippy`, `cargo test`, etc.
- **Node.js 22.x** (~100 MB) — needed at runtime for Claude Code CLI (npm global package)
- **Claude Code CLI** (`@anthropic-ai/claude-code`) — npm global, spawned by storkit via PTY
- **cargo-nextest** — pre-built binary, used by acceptance gates
- **git** — used extensively by agents and worktree management
- **System libs:** libssl3, ca-certificates
The build stage compiles the storkit binary with embedded frontend assets (build.rs runs `npm run build`). The runtime stage is based on `debian:bookworm-slim` but still needs Rust + Node because agents use them at runtime.
**Total estimated image size:** ~3-4 GB (dominated by the Rust toolchain). This is large but acceptable for a development tool that runs locally.
### 2. Bind mounts and filesystem performance
**OrbStack** uses Apple's VirtioFS for bind mounts, which is near-native speed. This is a significant advantage over Docker Desktop's older options:
| Runtime | Bind mount driver | Performance | Notes |
|---------|------------------|-------------|-------|
| OrbStack | VirtioFS (native) | ~95% native | Default, no config needed |
| Docker Desktop | VirtioFS | ~85-90% native | Must enable in settings (Docker Desktop 4.15+) |
| Docker Desktop | gRPC-FUSE (legacy) | ~40-60% native | Default on older versions, very slow for cargo builds |
| Docker Desktop | osxfs (deprecated) | ~30-50% native | Ancient default, unusable for Rust projects |
**For cargo builds on bind-mounted volumes:** The critical path is `target/` directory I/O. Since `target/` lives inside the bind-mounted project, large Rust projects will see a noticeable slowdown on Docker Desktop with gRPC-FUSE. OrbStack's VirtioFS makes this tolerable.
**Mitigation option:** Keep `target/` in a named Docker volume instead of on the bind mount. This gives native Linux filesystem speed for compilation artifacts while the source code remains bind-mounted. The trade-off is that `target/` won't be visible on the host, which is fine since it's a build cache.
### 3. Claude Code state persistence
Claude Code stores all state in `~/.claude/`:
- `sessions/` — conversation transcripts (used by `--resume`)
- `projects/` — per-project settings and memory
- `history.jsonl` — command history
- `session-env/` — environment snapshots
- `settings.json` — global preferences
**Solution:** Mount `~/.claude` as a named Docker volume (`claude-state`). This persists across container restarts. Session resumption (`--resume <session_id>`) will work correctly since the session files are preserved.
### 4. Networking
**Straightforward.** The container exposes port 3001 for the web UI + MCP endpoint. All chat integrations (Matrix, Slack, WhatsApp) connect outbound from the container, which works by default in Docker's bridge networking. No special configuration needed.
Port mapping: `3001:3001` in docker-compose.yml. Users access the web UI at `http://localhost:3001`.
### 5. API key handling
**Simple.** Pass `ANTHROPIC_API_KEY` as an environment variable via docker-compose.yml. The storkit server already reads it from the environment. Claude Code also reads `ANTHROPIC_API_KEY` from the environment.
### 6. Git operations on bind-mounted repos
**Works correctly.** Git operations inside the container on a bind-mounted volume are immediately visible on the host (and vice versa). The key considerations:
- **Git config:** The container runs as root, so `git config --global user.name/email` needs to be set inside the container (or mounted from host). Without this, commits have no author identity.
- **File ownership:** OrbStack maps the container's root user to the host user automatically (uid remapping). Docker Desktop does not — files created by the container may be owned by root on the host. OrbStack handles this transparently.
- **Worktrees:** `git worktree add` inside the container creates worktrees within the bind-mounted repo, which are visible on the host. This is correct behavior.
### 7. Cargo cache
**Named Docker volumes** for `/usr/local/cargo/registry` and `/usr/local/cargo/git` persist downloaded crates across container restarts. First `cargo build` downloads everything; subsequent builds use the cached crates. This is a standard Docker pattern.
### 8. OrbStack vs Docker Desktop
| Capability | OrbStack | Docker Desktop |
|-----------|----------|----------------|
| **VirtioFS (fast mounts)** | Default, always on | Must enable manually |
| **UID remapping** | Automatic (root → host user) | Manual or not available |
| **Memory usage** | ~50% less than Docker Desktop | Higher baseline overhead |
| **Startup time** | 1-2 seconds | 10-30 seconds |
| **License** | Free for personal use, paid for teams | Free for personal/small business, paid for enterprise |
| **Linux compatibility** | Full (Rosetta for x86 on ARM) | Full (QEMU for x86 on ARM) |
**Verdict:** OrbStack is strongly recommended for macOS. Docker Desktop works but requires VirtioFS to be enabled manually and has worse file ownership semantics. On Linux hosts, Docker Engine (not Desktop) is native and has none of these issues.
### 9. rebuild_and_restart inside a container
**Works with caveats.** The current implementation:
1. Runs `cargo build` from `CARGO_MANIFEST_DIR` (baked at compile time to `/app/server`)
2. Calls `exec()` to replace the process with the new binary
Inside a container, `exec()` works fine — it replaces the PID 1 process. However:
- The source tree must exist at `/app` inside the container (the path baked into the binary)
- The Rust toolchain must be available at runtime
- If the container is configured with `restart: unless-stopped`, a crash during rebuild could cause a restart loop
**The Dockerfile handles this** by copying the full source tree into `/app` in the runtime stage and including the Rust toolchain.
**Future improvement:** For the storkit-developing-itself case, mount the source tree as a volume at `/app` so code changes on the host are immediately available for rebuild. For the primary use case (developing other projects), the baked-in source is fine — the server doesn't change.
### 10. Multi-user / untrusted codebase considerations
The single-container model provides **host isolation** but no **agent-to-agent isolation**:
- All agents share the same filesystem, network, and process namespace
- A malicious codebase could interfere with other agents or the storkit server itself
- This is acceptable as a first step since the primary threat model is "storkit shouldn't wreck the host"
For true multi-tenant isolation (multiple untrusted projects), a future architecture could:
- Run one container per project (each with its own bind mount)
- Use Docker's `--read-only` with specific writable mounts
- Apply seccomp/AppArmor profiles to limit syscalls
### 11. Image distribution
The single-container approach enables simple distribution:
```
docker pull ghcr.io/crashlabs/storkit:latest
docker run -e ANTHROPIC_API_KEY=sk-ant-... -v /my/project:/workspace -p 3001:3001 storkit
```
This is a massive UX improvement over "install Rust, install Node, install Claude Code, clone the repo, cargo build, etc."
## Recommendation
**Proceed with implementation.** The single-container Docker approach is viable and solves the stated goals:
1. **Host isolation** — achieved via standard Docker containerization
2. **Clean install/uninstall**`docker compose up` / `docker compose down -v`
3. **Reproducible environment** — Dockerfile pins all versions
4. **Distributable product**`docker pull` for new users
5. **Resource limits**`deploy.resources.limits` in compose
### Follow-up stories to create:
1. **Story: Implement Docker container build and CI** — Set up automated image builds, push to registry, test that the image works end-to-end with a sample project.
2. **Story: Target directory optimization** — Move `target/` to a named volume to avoid bind mount I/O overhead for cargo builds. Benchmark the improvement.
3. **Story: Git identity in container** — Configure git user.name/email inside the container (from env vars or mounted .gitconfig).
4. **Story: Per-project container isolation** — For multi-tenant deployments, run one storkit container per project with tighter security (read-only root, seccomp, no-new-privileges).
5. **Story: Health endpoint** — Add a `/health` HTTP endpoint to the storkit server for the Docker healthcheck.
### Risks and open questions:
- **Image size (~3-4 GB):** Acceptable for a dev tool but worth optimizing later. The Rust toolchain dominates.
- **Rust toolchain at runtime:** Required for rebuild_and_restart and agent cargo commands. Cannot be eliminated without changing the architecture.
- **Claude Code CLI updates:** The CLI version is pinned at image build time. Users need to rebuild the image to get updates. Could use a volume mount for the npm global dir to allow in-place updates.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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