kenaz 0.3.22 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/core/.claude/hooks/_user-scope.js +1 -1
  2. package/core/.claude/hooks/core-resolve.js +1 -1
  3. package/core/.claude/hooks/worktree-create.js +6 -6
  4. package/core/.claude/hooks/worktree-remove.js +4 -4
  5. package/core/.collaboration/core/reconcile.js +16 -1
  6. package/core/.collaboration/core/task-2467-lifecycle.test.js +63 -0
  7. package/core/.collaboration/core/task-api.js +37 -7
  8. package/core/.formation/bifrost/launch.js +1 -1
  9. package/core/.formation/tools/kenaz-stats.js +1 -1
  10. package/core/.formation/tools/post-complete/git-merge.js +1 -1
  11. package/core/.formation/tools/prompt.js +1 -1
  12. package/core/.kenaz/specialist/ansuz_rules.yaml +7 -51
  13. package/core/.kenaz/specialist/ansuz_session_handoff.schema.json +2 -6
  14. package/core/.rule/general/project-self-containment.yaml +2 -2
  15. package/core/.specialist/Amelia/README.md +1 -1
  16. package/core/.specialist/Amelia/rule.yaml +1 -1
  17. package/core/.specialist/Ansuz/RULES.md +1 -1
  18. package/core/.specialist/Ansuz/concepts/commitment_layer.yaml +1 -1
  19. package/core/.specialist/Ansuz/concepts/evolvable_guardrails.yaml +1 -1
  20. package/core/.specialist/Ansuz/knowledge.yaml +1 -3
  21. package/core/.specialist/tools/__tests__/task-2409-lessons.test.js +10 -0
  22. package/core/.specialist/tools/__tests__/task-2427-harvest.test.js +25 -0
  23. package/core/.specialist/tools/ansuz-boot-fast.js +1 -1
  24. package/core/.specialist/tools/failure-detector.js +4 -4
  25. package/core/.specialist/tools/handoff-doc.js +1 -1
  26. package/core/.specialist/tools/lessons.js +2 -2
  27. package/core/CLAUDE.md +5 -5
  28. package/core/KENAZ_CORE_VERSION +1 -1
  29. package/core/dashboard/scripts/install-kenaz-cli.js +21 -6
  30. package/core/dev/scripts/check-file-size.js +1 -1
  31. package/core/dev/scripts/ci-feedback.js +1 -1
  32. package/core/dev/scripts/gc-agent-worktrees.js +11 -11
  33. package/core/dev/scripts/kenaz-session.js +3 -3
  34. package/core/dev/scripts/peer-identity-e2e.js +3 -3
  35. package/core/dev/scripts/run-rust-tests.js +2 -2
  36. package/core/dev/scripts/skill-routing-replay.js +3 -3
  37. package/core/dev/scripts/task1961/selftest.js +2 -2
  38. package/core/dev/scripts/windows-hide-guard.test.js +97 -0
  39. package/core/plugins/kenaz/guidance.md +1 -0
  40. package/core/plugins/kenaz/hooks/core-resolve.js +1 -1
  41. package/core/plugins/kenaz/hooks/kenaz-hook.js +52 -4
  42. package/core/plugins/kenaz/scripts/kenaz.test.js +72 -5
  43. package/lib/cli.js +9 -5
  44. package/package.json +6 -6
  45. package/vendor/install-kenaz-cli.js +21 -6
  46. package/core/.kenaz/designs/METAPLASTICITY_CONFIDENCE_DESIGN.md +0 -537
  47. package/core/.kenaz/designs/REFLEX_INITIATOR_DESIGN.md +0 -501
  48. package/core/.kenaz/designs/TASK_1385_handoff_mcp_design.md +0 -426
  49. package/core/.kenaz/designs/TASK_932_hippocampus_consolidation.md +0 -103
  50. package/core/.kenaz/designs/TASK_934_efe_signal_engine.md +0 -97
  51. package/core/.kenaz/designs/TASK_935_self_evolution_framework.md +0 -154
  52. package/core/.kenaz/designs/VISION_cognitive_architecture_roadmap.md +0 -159
  53. package/core/.kenaz/designs/metaplasticity_simulation_results.json +0 -696
  54. package/core/.kenaz/main-memory/README.md +0 -230
  55. package/core/.kenaz/main-memory/kenaz/cortex/001_cortex_overview.md +0 -168
  56. package/core/.kenaz/main-memory/kenaz/cortex/001_rag_engine_overview.md +0 -30
  57. package/core/.kenaz/main-memory/kenaz/memory-system/001_three_tier_architecture.md +0 -361
  58. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_execution_flow.md +0 -117
  59. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_granularity.md +0 -154
  60. package/core/.kenaz/main-memory/kenaz/pipeline/002_team_priority.md +0 -51
  61. package/core/.kenaz/main-memory/kenaz/pipeline/003_feature_id_system.md +0 -46
  62. package/core/.kenaz/main-memory/kenaz/rules/001_gen_007_self_containment.md +0 -108
  63. package/core/.kenaz/main-memory/kenaz/rules/001_rule_priority_system.md +0 -121
  64. package/core/.kenaz/main-memory/kenaz/rules/002_agt_006_pre_check.md +0 -0
  65. package/core/.kenaz/main-memory/kenaz/rules/003_ppl_002_task_archival.md +0 -48
  66. package/core/.kenaz/main-memory/kenaz/system/001_dual_track_task_system.md +0 -197
  67. package/core/.kenaz/main-memory/knowledge/patterns/001_json_bom_issue.md +0 -78
  68. package/core/.kenaz/main-memory/knowledge/patterns/001_leader_worker_pattern.md +0 -0
  69. package/core/.kenaz/main-memory/knowledge/patterns/002_scope_path_conflict.md +0 -115
  70. package/core/.kenaz/main-memory/knowledge/patterns/002_task_dependency_resolution.md +0 -223
  71. package/core/.kenaz/main-memory/knowledge/patterns/003_question_protocol.md +0 -242
  72. package/core/.kenaz/main-memory/knowledge/patterns/004_user_insight_value.md +0 -111
  73. package/core/.kenaz/main-memory/knowledge/patterns/005_file_lock_pattern.md +0 -274
  74. package/core/.kenaz/main-memory/knowledge/references/001_ppl_rules.md +0 -28
  75. package/core/.kenaz/main-memory/knowledge/solutions/001_json_bom_issue.md +0 -137
  76. package/core/.kenaz/main-memory/knowledge/solutions/001_team_invocation.md +0 -0
  77. package/core/.kenaz/main-memory/knowledge/solutions/002_passive_monitoring.md +0 -0
  78. package/core/.kenaz/main-memory/knowledge/solutions/003_windows_file_race_condition.md +0 -239
  79. package/core/.kenaz/main-memory/registry.json +0 -326
  80. package/core/.kenaz/main-memory/version.yaml +0 -58
  81. package/core/.kenaz/specialist/memory_guard_fired.json +0 -1
  82. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +0 -1
  83. package/core/.kenaz/specialist/memory_source_priority.yaml +0 -260
  84. package/core/.kenaz/specialist/prompt_1775.txt +0 -317
  85. package/core/.kenaz/specialist/prompt_1776.txt +0 -326
  86. package/core/.kenaz/specialist/prompt_1791.txt +0 -320
  87. package/core/.kenaz/specialist/prompt_1792.txt +0 -320
  88. package/core/.kenaz/specialist/prompt_1795.txt +0 -281
  89. package/core/.kenaz/specialist/prompt_1813.txt +0 -332
  90. package/core/.kenaz/specialist/prompt_1814.txt +0 -401
  91. package/core/.kenaz/specialist/prompt_1815.txt +0 -394
  92. package/core/.kenaz/specialist/prompt_1816.txt +0 -437
  93. package/core/.kenaz/specialist/prompt_1818.txt +0 -361
  94. package/core/.kenaz/specialist/prompt_1819.txt +0 -421
  95. package/core/.kenaz/specialist/prompt_1821.txt +0 -345
  96. package/core/.kenaz/specialist/prompt_1822.txt +0 -313
  97. package/core/.kenaz/specialist/prompt_1824.txt +0 -348
  98. package/core/.kenaz/specialist/prompt_1826.txt +0 -388
  99. package/core/.kenaz/specialist/rune_efe_salience_gap.md +0 -21
  100. package/core/.kenaz/specialist/task1825_update.json +0 -43
  101. package/core/.kenaz/specialist/taskgen/consolidation_i.json +0 -38
  102. package/core/.kenaz/specialist/taskgen/csharp_a.json +0 -44
  103. package/core/.kenaz/specialist/taskgen/csharp_b.json +0 -40
  104. package/core/.kenaz/specialist/taskgen/embedding_e.json +0 -34
  105. package/core/.kenaz/specialist/taskgen/hygiene_fg.json +0 -39
  106. package/core/.kenaz/specialist/taskgen/pathology_h.json +0 -36
  107. package/core/.kenaz/specialist/taskgen/unity_noise_d.json +0 -38
  108. package/core/.kenaz/specialist/taskgen/visibility_c.json +0 -38
  109. package/core/.specialist/Ansuz/decisions/ADR-requirement-graph-layer.md +0 -390
  110. package/core/.specialist/Ansuz/self_model_seed.backup.json +0 -100
  111. package/core/.specialist/ansuz_session_handoff.json +0 -96
  112. package/core/dev/ALAYA_FIELD_FEEDBACK_DESIGN.md +0 -126
  113. package/core/dev/ANSUZ_SCAFFOLD_DIET_2026-09-20.md +0 -231
  114. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +0 -355
  115. package/core/dev/ANSUZ_WORKFLOW_MODERNIZATION.md +0 -143
  116. package/core/dev/CORTEX_META_GRAPH_ASSESSMENT.md +0 -99
  117. package/core/dev/FREYA_DOWNSTREAM_BUGS_2026-09-19.md +0 -44
  118. package/core/dev/GLOBAL_MEMORY_IDENTITY_CONSOLIDATION.md +0 -263
  119. package/core/dev/GUARD_EFFECTIVENESS_DESIGN.md +0 -180
  120. package/core/dev/HEALTH_GATE_VARIANCE_ASSESSMENT.md +0 -271
  121. package/core/dev/HOOK_DIET_2026-09-21.md +0 -126
  122. package/core/dev/JEV_INTEGRATION_PLAN.md +0 -189
  123. package/core/dev/KENAZ_AGENT_CONNECT_v1_SPEC.md +0 -139
  124. package/core/dev/MOBILE_DESIGN_SPEC.md +0 -569
  125. package/core/dev/MULTI_ANSUZ_SPEC.md +0 -136
  126. package/core/dev/MUNINN_RETIREMENT.md +0 -115
  127. package/core/dev/PHASE3_ATTRIBUTION_POPULATION_DIAGNOSIS.md +0 -211
  128. package/core/dev/PHASE3_P3-2B_TASKLEVEL_PROBE.md +0 -83
  129. package/core/dev/PHASE3_P3-2_POPULATION_DISJOINTNESS.md +0 -83
  130. package/core/dev/PHASE3_P3-2_REMEASURE_REPORT.md +0 -231
  131. package/core/dev/PREDICTION_GROUNDING_DESIGN.md +0 -376
  132. package/core/dev/PRODUCT_SPEC.md +0 -317
  133. package/core/dev/PROJECT_REGISTRY_DUPLICATE_ASSESSMENT.md +0 -86
  134. package/core/dev/STARTUP_TIMELINE_TASK_1995.md +0 -181
  135. package/core/dev/SYNAPSE_WORKER_PER_PROJECT.md +0 -881
  136. package/core/dev/TASK_1680_P3-3_DISPATCH_SPEC.md +0 -96
  137. package/core/dev/TASK_1684_CALIBRATION_IMPACT_ANALYSIS.md +0 -170
  138. package/core/dev/TASK_1684_FORK_A_GOODHART_DESIGN.md +0 -171
  139. package/core/dev/TASK_1684_P3_2_REMEASURE_VALIDATION.md +0 -262
  140. package/core/dev/TASK_1903_SIGNAL_AUC_MEASUREMENT.md +0 -207
  141. package/core/dev/TASK_1904_BRANCH_INTEGRITY_AUDIT.md +0 -146
  142. package/core/dev/ansuz-eval/README.md +0 -38
  143. package/core/dev/ansuz-eval/build-fixtures.js +0 -87
  144. package/core/dev/ansuz-eval/grade.js +0 -96
  145. package/core/dev/ansuz-eval/grader.test.js +0 -117
  146. package/core/dev/ansuz-eval/tasks.md +0 -32
  147. package/core/dev/archive/ansuz/BOOT_FULL.md +0 -141
  148. package/core/dev/archive/ansuz/agents/ansuz-boot.md +0 -176
  149. package/core/dev/archive/ansuz/designs/alaya-passive-surfacing.md +0 -84
  150. package/core/dev/archive/ansuz/designs/cc_memory_indexing.md +0 -307
  151. package/core/dev/archive/ansuz/designs/check_guard.md +0 -322
  152. package/core/dev/archive/ansuz/designs/consequence_loop.md +0 -227
  153. package/core/dev/archive/ansuz/designs/mcp_kuzudb_lock_architecture.md +0 -312
  154. package/core/dev/archive/ansuz/designs/phase0_git_enrichment.md +0 -278
  155. package/core/dev/archive/ansuz/designs/refactor_mcp_tools_synapse.md +0 -490
  156. package/core/dev/archive/ansuz/designs/semantic_markdown_extraction.md +0 -167
  157. package/core/dev/archive/ansuz/designs/task_1372_prompt_injects_into.md +0 -193
  158. package/core/dev/archive/ansuz/designs/thought_stack.md +0 -286
  159. package/core/dev/archive/ansuz/investigations/reachability_unified_api_2026-04-11.md +0 -330
  160. package/core/dev/archive/ansuz/investigations/synapse_orphans_indexing_bug_2026-04-11.md +0 -352
  161. package/core/dev/archive/ansuz/investigations/synapse_orphans_reindex_verification_2026-04-11.md +0 -48
  162. package/core/dev/archive/ansuz/investigations/synapse_orphans_verification_2026-04-11.md +0 -170
  163. package/core/dev/archive/ansuz/legacy/kernel.yaml +0 -399
  164. package/core/dev/archive/ansuz/legacy/phases/phase_0.yaml +0 -418
  165. package/core/dev/archive/ansuz/legacy/phases/phase_1.yaml +0 -376
  166. package/core/dev/archive/ansuz/legacy/phases/phase_10.yaml +0 -35
  167. package/core/dev/archive/ansuz/legacy/phases/phase_11.yaml +0 -582
  168. package/core/dev/archive/ansuz/legacy/phases/phase_2.yaml +0 -94
  169. package/core/dev/archive/ansuz/legacy/phases/phase_3.yaml +0 -274
  170. package/core/dev/archive/ansuz/legacy/phases/phase_4.yaml +0 -67
  171. package/core/dev/archive/ansuz/legacy/phases/phase_5.yaml +0 -32
  172. package/core/dev/archive/ansuz/legacy/phases/phase_6.yaml +0 -91
  173. package/core/dev/archive/ansuz/legacy/phases/phase_7.yaml +0 -58
  174. package/core/dev/archive/ansuz/legacy/phases/phase_8.yaml +0 -146
  175. package/core/dev/archive/ansuz/legacy/phases/phase_9.yaml +0 -424
  176. package/core/dev/archive/ansuz/specs/INDEX_bifrost_hook_parity.yaml +0 -92
  177. package/core/dev/archive/ansuz/specs/active-inference-formation.yaml +0 -453
  178. package/core/dev/archive/ansuz/specs/brief_TASK_1228_userpromptsubmit.yaml +0 -191
  179. package/core/dev/archive/ansuz/specs/brief_TASK_1229_pretooluse_posttooluse.yaml +0 -250
  180. package/core/dev/archive/ansuz/specs/brief_TASK_1230_sessionstart_stop.yaml +0 -301
  181. package/core/dev/archive/ansuz/specs/brief_TASK_1231_verification.yaml +0 -272
  182. package/core/dev/archive/skills/feature_agent/SKILL.md +0 -289
  183. package/core/dev/design/PHASE4_DESIGN.md +0 -559
  184. package/core/dev/design/dashboard_docs_integration_PLAN.md +0 -388
  185. package/core/dev/design/matrix_format_ABBREVIATIONS.md +0 -655
  186. package/core/dev/design/matrix_format_DESIGN_SPEC.md +0 -601
  187. package/core/dev/design/matrix_format_DISCUSSION_SUMMARY.md +0 -484
  188. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +0 -13
  189. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +0 -9
  190. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +0 -14
  191. package/core/dev/design/matrix_format_SYNTAX_BNF.md +0 -754
  192. package/core/dev/design/matrix_format_TOKEN_COMPARISON.md +0 -484
  193. package/core/dev/design/matrix_v2_COGNITIVE_DESIGN.md +0 -503
  194. package/core/dev/design/matrix_v2_DISCUSSION_SUMMARY.md +0 -414
  195. package/core/dev/design/matrix_v2_EXAMPLE.matrix +0 -67
  196. package/core/dev/designs/EXPANDABLE_CARD_DESIGN_SPEC.md +0 -509
  197. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +0 -52
  198. package/core/dev/jev-eval/ANNOTATION_GUIDE.md +0 -68
  199. package/core/dev/jev-eval/BASELINE_COMPARISON.md +0 -45
  200. package/core/dev/jev-eval/CONTEXT_REVIEW.md +0 -31
  201. package/core/dev/jev-eval/EVALUATION_STATUS.md +0 -39
  202. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +0 -33
  203. package/core/dev/jev-eval/PACKAGING_VERIFICATION.md +0 -42
  204. package/core/dev/jev-eval/README.md +0 -101
  205. package/core/dev/jev-eval/THALAMUS_RANKING.md +0 -58
  206. package/core/dev/jev-eval/VALIDATION_PROGRESS.md +0 -54
  207. package/core/dev/jev-eval/cli.mjs +0 -50
  208. package/core/dev/jev-eval/context.mjs +0 -183
  209. package/core/dev/jev-eval/corpus.mjs +0 -186
  210. package/core/dev/jev-eval/fixtures/conversation-review.seed.jsonl +0 -6
  211. package/core/dev/jev-eval/fixtures/synthetic.jsonl +0 -11
  212. package/core/dev/jev-eval/metrics.mjs +0 -67
  213. package/core/dev/jev-eval/muninn-baseline.mjs +0 -119
  214. package/core/dev/jev-eval/providers.mjs +0 -95
  215. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +0 -32
  216. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +0 -48
  217. package/core/dev/jev-eval/reports/conversation-review.pending.json +0 -151
  218. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +0 -52
  219. package/core/dev/jev-eval/reports/length-probe-2026-09-20.json +0 -133
  220. package/core/dev/jev-eval/reports/live-smoke-2026-09-20.json +0 -616
  221. package/core/dev/jev-eval/reports/muninn-baseline-2026-09-20.json +0 -52
  222. package/core/dev/jev-eval/reports/resilience-2026-09-20.json +0 -520
  223. package/core/dev/jev-eval/reports/rules-baseline.json +0 -197
  224. package/core/dev/jev-eval/reports/synthetic-review.pending.json +0 -357
  225. package/core/dev/jev-eval/resilience.mjs +0 -71
  226. package/core/dev/jev-eval/review.mjs +0 -78
  227. package/core/dev/jev-eval/schema.mjs +0 -87
  228. package/core/dev/jev-eval/test/context.test.mjs +0 -95
  229. package/core/dev/jev-eval/test/corpus.test.mjs +0 -102
  230. package/core/dev/jev-eval/test/eval.test.mjs +0 -146
  231. package/core/dev/jev-eval/test/muninn-baseline.test.mjs +0 -71
  232. package/core/dev/jev-eval/test/resilience.test.mjs +0 -72
  233. package/core/dev/jev-eval/test/review.test.mjs +0 -61
  234. package/core/dev/pipeline/PHASE3_PLANNING_SUMMARY.md +0 -338
  235. package/core/dev/pipeline/PROGRESS.md +0 -113
  236. package/core/dev/pipeline/PROGRESS_template.md +0 -860
  237. package/core/dev/pipeline/QA_REPORT_F008.md +0 -431
  238. package/core/dev/pipeline/QA_REPORT_LOCAL_CLAUDE_DIAGNOSIS.md +0 -583
  239. package/core/dev/pipeline/README.md +0 -210
  240. package/core/dev/pipeline/WORKFLOW_GUIDE.md +0 -824
  241. package/core/dev/pipeline/archived/TASK_015_tauri_init.yaml +0 -53
  242. package/core/dev/pipeline/archived/TASK_016_tauri_commands.yaml +0 -54
  243. package/core/dev/pipeline/archived/TASK_017_rust_pty.yaml +0 -54
  244. package/core/dev/pipeline/archived/TASK_018_tauri_bundle.yaml +0 -53
  245. package/core/dev/pipeline/archived/TASK_019_release_workflow.yaml +0 -56
  246. package/core/dev/pipeline/archived/TASK_020_update_ui.yaml +0 -54
  247. package/core/dev/pipeline/archived/TASK_021_update_notification_ui.yaml +0 -55
  248. package/core/dev/pipeline/archived/TASK_022_remove_node_pty.yaml +0 -65
  249. package/core/dev/pipeline/archived/TASK_023_api_routes_migration.yaml +0 -86
  250. package/core/dev/pipeline/archived/TASK_024_feature_id_system.yaml +0 -51
  251. package/core/dev/pipeline/archived/TASK_025_executable_acceptance.yaml +0 -66
  252. package/core/dev/pipeline/archived/TASK_026_spec_versioning.yaml +0 -56
  253. package/core/dev/pipeline/archived/TASK_027_drift_detection.yaml +0 -60
  254. package/core/dev/pipeline/archived/TASK_028_tauri_pty_manager.yaml +0 -60
  255. package/core/dev/pipeline/archived/TASK_029_tauri_pty_commands.yaml +0 -62
  256. package/core/dev/pipeline/archived/TASK_030_frontend_session_adapter.yaml +0 -54
  257. package/core/dev/pipeline/archived/TASK_031_terminal_tauri_events.yaml +0 -56
  258. package/core/dev/pipeline/archived/TASK_041_scheduler_data_models.yaml +0 -54
  259. package/core/dev/pipeline/archived/TASK_042_path_lock_manager.yaml +0 -53
  260. package/core/dev/pipeline/archived/TASK_043_process_manager.yaml +0 -57
  261. package/core/dev/pipeline/archived/TASK_044_git_integration.yaml +0 -85
  262. package/core/dev/pipeline/archived/TASK_045_task_queue_manager.yaml +0 -54
  263. package/core/dev/pipeline/archived/TASK_046_scheduler_dispatcher.yaml +0 -60
  264. package/core/dev/pipeline/archived/TASK_047_tauri_scheduler_commands.yaml +0 -55
  265. package/core/dev/pipeline/archived/TASK_048_realtime_status_push.yaml +0 -92
  266. package/core/dev/pipeline/archived/TASK_049_frontend_scheduler_integration.yaml +0 -58
  267. package/core/dev/pipeline/archived/TASK_050_error_recovery.yaml +0 -56
  268. package/core/dev/pipeline/archived/TASK_051_optimization_proposals_backend.yaml +0 -53
  269. package/core/dev/pipeline/archived/TASK_052_optimization_proposals_ui.yaml +0 -58
  270. package/core/dev/pipeline/archived/TASK_053_optimization_proposals_diff_view.yaml +0 -54
  271. package/core/dev/pipeline/archived/TASK_054_multi_project_scheduler_state.yaml +0 -76
  272. package/core/dev/pipeline/archived/TASK_055_scheduler_api_project_scope.yaml +0 -64
  273. package/core/dev/pipeline/archived/TASK_056_frontend_scheduler_project_scope.yaml +0 -62
  274. package/core/dev/pipeline/archived/TASK_057_scheduler_module_structure.yaml +0 -54
  275. package/core/dev/pipeline/archived/TASK_058_scheduler_models_extract.yaml +0 -51
  276. package/core/dev/pipeline/archived/TASK_059_scheduler_core_extract.yaml +0 -51
  277. package/core/dev/pipeline/archived/TASK_060_scheduler_commands_extract.yaml +0 -51
  278. package/core/dev/pipeline/archived/TASK_061_scheduler_specialized_commands.yaml +0 -53
  279. package/core/dev/pipeline/archived/TASK_062_process_manager_module_structure.yaml +0 -56
  280. package/core/dev/pipeline/archived/TASK_063_process_manager_core_extract.yaml +0 -56
  281. package/core/dev/pipeline/archived/TASK_064_recovery_module_structure.yaml +0 -57
  282. package/core/dev/pipeline/archived/TASK_065_recovery_core_extract.yaml +0 -56
  283. package/core/dev/pipeline/archived/TASK_066_self_enhancement_scheduler_models.yaml +0 -60
  284. package/core/dev/pipeline/archived/TASK_067_agents_section_quick_actions.yaml +0 -53
  285. package/core/dev/pipeline/archived/TASK_067_self_enhancement_scheduler_core.yaml +0 -65
  286. package/core/dev/pipeline/archived/TASK_068_agent_workflow_rule_enhancement.yaml +0 -46
  287. package/core/dev/pipeline/archived/TASK_068_self_enhancement_tauri_commands.yaml +0 -61
  288. package/core/dev/pipeline/archived/TASK_069_agent_wizard_responsive.yaml +0 -46
  289. package/core/dev/pipeline/archived/TASK_069_self_enhancement_ui.yaml +0 -62
  290. package/core/dev/pipeline/archived/TASK_070_preview_panel_redesign.yaml +0 -62
  291. package/core/dev/pipeline/archived/TASK_070_self_enhancement_integration.yaml +0 -57
  292. package/core/dev/pipeline/archived/TASK_071_preview_panel_qa.yaml +0 -98
  293. package/core/dev/pipeline/archived/TASK_071_single_agent_config.yaml +0 -57
  294. package/core/dev/pipeline/archived/TASK_072_preview_modal_esc_fix.yaml +0 -71
  295. package/core/dev/pipeline/archived/TASK_072_product_review_module.yaml +0 -57
  296. package/core/dev/pipeline/archived/TASK_073_agents_page_component_refactor.yaml +0 -68
  297. package/core/dev/pipeline/archived/TASK_073_rename_single_agent.yaml +0 -64
  298. package/core/dev/pipeline/archived/TASK_074_preview_mode_ui_diagnosis.yaml +0 -71
  299. package/core/dev/pipeline/archived/TASK_074_single_agent_ui_toggle.yaml +0 -56
  300. package/core/dev/pipeline/archived/TASK_075_agents_page_component_refactor.yaml +0 -69
  301. package/core/dev/pipeline/archived/TASK_075_single_agent_integration_test.yaml +0 -75
  302. package/core/dev/pipeline/archived/TASK_076_preview_mode_ui_diagnosis.yaml +0 -70
  303. package/core/dev/pipeline/archived/TASK_076_single_agent_continuous_mode.yaml +0 -65
  304. package/core/dev/pipeline/archived/TASK_077_failure_directory_structure.yaml +0 -51
  305. package/core/dev/pipeline/archived/TASK_077_single_agent_typescript_types.yaml +0 -59
  306. package/core/dev/pipeline/archived/TASK_078_fail_001_agent_no_output.yaml +0 -53
  307. package/core/dev/pipeline/archived/TASK_078_single_agent_ui_simplify.yaml +0 -74
  308. package/core/dev/pipeline/archived/TASK_079_dashboard_rwd_responsive.yaml +0 -63
  309. package/core/dev/pipeline/archived/TASK_079_fail_002_json_bom.yaml +0 -56
  310. package/core/dev/pipeline/archived/TASK_080_fail_003_queue_pollution.yaml +0 -56
  311. package/core/dev/pipeline/archived/TASK_080_http_server_module.yaml +0 -55
  312. package/core/dev/pipeline/archived/TASK_081_failure_logging_tools.yaml +0 -57
  313. package/core/dev/pipeline/archived/TASK_081_http_api_routes.yaml +0 -62
  314. package/core/dev/pipeline/archived/TASK_082_frontend_api_adapter.yaml +0 -51
  315. package/core/dev/pipeline/archived/TASK_082_integrate_failure_to_workflow.yaml +0 -60
  316. package/core/dev/pipeline/archived/TASK_083_cleanup_nextjs_api.yaml +0 -48
  317. package/core/dev/pipeline/archived/TASK_083_task_queue_cleanup.yaml +0 -67
  318. package/core/dev/pipeline/archived/TASK_084_rust_dead_code_cleanup.yaml +0 -66
  319. package/core/dev/pipeline/archived/TASK_084_scheduler_sync_logic_fix.yaml +0 -68
  320. package/core/dev/pipeline/archived/TASK_085_http_api_web_mode_fixes.yaml +0 -46
  321. package/core/dev/pipeline/archived/TASK_085_memory_consolidation_0204_0205.yaml +0 -98
  322. package/core/dev/pipeline/archived/TASK_086_collapsible_preview_panel.yaml +0 -161
  323. package/core/dev/pipeline/archived/TASK_086_web_mode_feature_parity.yaml +0 -62
  324. package/core/dev/pipeline/archived/TASK_087_manual_memory_archival.yaml +0 -163
  325. package/core/dev/pipeline/archived/TASK_087_mobile_http_control.yaml +0 -68
  326. package/core/dev/pipeline/archived/TASK_088_fail_003_to_ppl_002_rule.yaml +0 -63
  327. package/core/dev/pipeline/archived/TASK_088_mobile_http_qa.yaml +0 -121
  328. package/core/dev/pipeline/archived/TASK_089_agent_collaboration_topic.yaml +0 -60
  329. package/core/dev/pipeline/archived/TASK_089_web_mode_monitor_fix.yaml +0 -58
  330. package/core/dev/pipeline/archived/TASK_090_cli_detection_fix.yaml +0 -61
  331. package/core/dev/pipeline/archived/TASK_090_ui_ux_lessons_topic.yaml +0 -63
  332. package/core/dev/pipeline/archived/TASK_091_expandable_card_design.yaml +0 -56
  333. package/core/dev/pipeline/archived/TASK_091_move_agent_section_components.yaml +0 -65
  334. package/core/dev/pipeline/archived/TASK_092_expandable_card_component.yaml +0 -60
  335. package/core/dev/pipeline/archived/TASK_092_refactor_agent_create_wizard.yaml +0 -84
  336. package/core/dev/pipeline/archived/TASK_093_taskcard_detail_integration.yaml +0 -57
  337. package/core/dev/pipeline/archived/TASK_093_update_barrel_exports_test.yaml +0 -84
  338. package/core/dev/pipeline/archived/TASK_094_ai_agent_generation_enhancement.yaml +0 -115
  339. package/core/dev/pipeline/archived/TASK_094_proposalcard_detail_integration.yaml +0 -55
  340. package/core/dev/pipeline/archived/TASK_095_preview_fixes.yaml +0 -129
  341. package/core/dev/pipeline/archived/TASK_095_single_agent_task_selector.yaml +0 -60
  342. package/core/dev/pipeline/archived/TASK_096_agents_page_ux_improvements.yaml +0 -163
  343. package/core/dev/pipeline/archived/TASK_096_single_agent_status_sync.yaml +0 -60
  344. package/core/dev/pipeline/archived/TASK_097_local_claude_error_logging.yaml +0 -59
  345. package/core/dev/pipeline/archived/TASK_097_single_agent_monitor_events.yaml +0 -59
  346. package/core/dev/pipeline/archived/TASK_098_product_manager_team_phase2.yaml +0 -60
  347. package/core/dev/pipeline/archived/TASK_098_single_agent_refactor_test.yaml +0 -58
  348. package/core/dev/pipeline/archived/TASK_099_backend_team_creation.yaml +0 -258
  349. package/core/dev/pipeline/archived/TASK_100_frontend_team_creation.yaml +0 -61
  350. package/core/dev/pipeline/archived/TASK_101_orchestrator_system.yaml +0 -403
  351. package/core/dev/pipeline/archived/TASK_102_designer_sre_teams.yaml +0 -90
  352. package/core/dev/pipeline/archived/TASK_103_integration_testing.yaml +0 -86
  353. package/core/dev/pipeline/archived/TASK_128_integration_testing.yaml +0 -83
  354. package/core/dev/pipeline/archived/TASK_134_cortex_v2_phase3_file_watcher.yaml +0 -65
  355. package/core/dev/pipeline/archived/TASK_134_team_http_api.yaml +0 -96
  356. package/core/dev/pipeline/archived/TASK_135_cortex_v2_phase3_git_monitor.yaml +0 -63
  357. package/core/dev/pipeline/archived/TASK_136_cortex_v2_phase3_change_analyzer.yaml +0 -69
  358. package/core/dev/pipeline/archived/TASK_137_cortex_v2_phase3_cache_invalidator.yaml +0 -67
  359. package/core/dev/pipeline/archived/TASK_137_team_orchestrator_integration.yaml +0 -93
  360. package/core/dev/pipeline/archived/TASK_138_cortex_v2_phase3_distributed_cache.yaml +0 -68
  361. package/core/dev/pipeline/archived/TASK_138_matrix_folder_structure.yaml +0 -61
  362. package/core/dev/pipeline/archived/TASK_139_cortex_v2_phase3_cache_prewarming.yaml +0 -65
  363. package/core/dev/pipeline/archived/TASK_146_unified_documentation.yaml +0 -141
  364. package/core/dev/pipeline/archived/TASK_147_pipeline_execution_rules.yaml +0 -76
  365. package/core/dev/pipeline/archived/TASK_148_update_claude_md.yaml +0 -77
  366. package/core/dev/pipeline/archived/TASK_149_fix_nextjs_mdx_serialization.yaml +0 -63
  367. package/core/dev/pipeline/archived/TASK_149_update_team_docs.yaml +0 -77
  368. package/core/dev/pipeline/archived/TASK_150_pipeline_workflow_guide.yaml +0 -82
  369. package/core/dev/pipeline/archived/TASK_164_fix_smart_context_switch.yaml +0 -49
  370. package/core/dev/pipeline/archived/TASK_165_ctags_symbol_index.yaml +0 -53
  371. package/core/dev/pipeline/archived/TASK_166_symbol_search_mcp_tool.yaml +0 -48
  372. package/core/dev/pipeline/archived/TASK_167_llm_module_summary.yaml +0 -55
  373. package/core/dev/pipeline/archived/TASK_168_map_reduce_context.yaml +0 -51
  374. package/core/dev/pipeline/archived/TASK_169_v2_integration_testing.yaml +0 -52
  375. package/core/dev/pipeline/backups/archive_2026-02-04T22-07-22/TASK_QUEUE_backup.json +0 -95
  376. package/core/dev/pipeline/docs/multi-agent-coordination.md +0 -446
  377. package/core/dev/pipeline/docs/overview.md +0 -406
  378. package/core/dev/pipeline/docs/task-management.md +0 -412
  379. package/core/dev/pipeline/docs/workflows.md +0 -32
  380. package/core/dev/pipeline/orchestrator/schemas/task_queue_schema.json +0 -58
  381. package/core/dev/pipeline/orchestrator/schemas/task_schema.json +0 -139
  382. package/core/dev/pipeline/plans/PLAN_task_cli_refactor.md +0 -281
  383. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +0 -27
  384. package/core/dev/plans/ANSUZ_SLIM_PLAN.md +0 -68
  385. package/core/dev/plans/CLI_FIRST_INSTALL_FLOW.md +0 -120
  386. package/core/dev/plans/FORMATION_RETIREMENT_PLAN.md +0 -313
  387. package/core/dev/plans/KUZU_REPLACEMENT_PLAN.md +0 -126
  388. package/core/dev/scripts/CRASH_DIAGNOSIS.md +0 -47
  389. package/core/dev/scripts/README.md +0 -142
  390. package/core/dev/scripts/RUN_ONCE.bat +0 -40
  391. package/core/dev/scripts/START_DEV_AGENT.bat +0 -63
  392. package/core/dev/scripts/START_MULTI_AGENT.bat +0 -80
  393. package/core/dev/scripts/dev_agent_scheduler.ps1 +0 -536
  394. package/core/dev/scripts/init_git.ps1 +0 -396
  395. package/core/dev/scripts/init_git.sh +0 -337
  396. package/core/dev/scripts/init_project.ps1 +0 -851
  397. package/core/dev/scripts/init_project.sh +0 -477
  398. package/core/dev/scripts/multi_agent_scheduler.ps1 +0 -2021
  399. package/core/dev/scripts/multi_agent_scheduler.sh +0 -1344
  400. package/core/dev/scripts/run_once.sh +0 -47
  401. package/core/dev/scripts/setup_rag.ps1 +0 -304
  402. package/core/dev/scripts/setup_rag.sh +0 -230
  403. package/core/dev/scripts/start_dev_agent.sh +0 -137
  404. package/core/dev/scripts/start_multi_agent.sh +0 -41
  405. package/core/dev/scripts/sync_task_queue.ps1 +0 -505
  406. package/core/dev/scripts/sync_task_queue.sh +0 -392
  407. package/core/dev/specs/agent-connect/PROTOCOL.md +0 -177
  408. package/core/dev/specs/agent-connect/SDK_GUIDE.md +0 -915
  409. package/core/dev/specs/agent-connect/examples/minimal-site/README.md +0 -137
  410. package/core/dev/specs/agent-connect/examples/minimal-site/package.json +0 -12
  411. package/core/dev/specs/agent-connect/examples/minimal-site/public/index.html +0 -116
  412. package/core/dev/specs/agent-connect/examples/minimal-site/public/install-redirect.js +0 -73
  413. package/core/dev/specs/agent-connect/examples/minimal-site/server.js +0 -516
  414. package/core/dev/specs/agent-connect/examples/minimal-site/test/smoke.test.mjs +0 -263
  415. package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-empty-prompt-no-first-turn.md +0 -77
  416. package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-prompt-mojibake.md +0 -90
  417. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-07.md +0 -61
  418. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-08_relay-v1-conformance.md +0 -76
  419. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-09_v0.4-session-channel.md +0 -87
  420. package/core/dev/specs/agent-connect/history/FLOWPIX_REPLY_agent-hub_2026-09-08_relay-v1-answers.md +0 -68
  421. package/core/dev/specs/agent-connect/history/FLOWPIX_bridge_CONTRACT.md +0 -642
  422. package/core/dev/specs/agent-connect/history/FLOWPIX_spikes_relay_spike_relay.mjs +0 -244
  423. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-07.md +0 -77
  424. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_direction-change-v0.3.md +0 -44
  425. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-answers-ack.md +0 -37
  426. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-conformance.md +0 -56
  427. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_annotations-install-coldstart.md +0 -44
  428. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_empty-prompt-first-turn.md +0 -56
  429. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_prompt-mojibake-fixed.md +0 -48
  430. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_session-channel.md +0 -57
  431. package/core/dev/specs/agent-connect/history/PROTOCOL_v0.3_snapshot.md +0 -379
  432. package/core/dev/specs/agent-connect/history/README.md +0 -47
  433. package/core/dev/specs/peer/CODEX_INTERACTIVE_PUSH.md +0 -65
  434. package/core/dev/specs/peer/CODEX_MANAGED_DAEMON.md +0 -54
  435. package/core/dev/specs/peer/CODEX_PEER_PULL_SPIKE.md +0 -54
  436. package/core/dev/specs/peer/MODS_SPIKE.md +0 -133
  437. package/core/dev/specs/peer/PER_PROJECT_ADDRESSING.md +0 -143
  438. package/core/dev/specs/peer/SWARM_PROTOCOLS.md +0 -256
  439. package/core/dev/specs/peer/codex-hook-shim-peer.test.js +0 -113
  440. package/core/dev/specs/peer/codex-push-launcher.test.js +0 -142
  441. package/core/dev/specs/peer/setup-codex-hooks.test.js +0 -60
  442. package/core/dev/specs/peer-ansuz/DELIVERY_SPIKE.md +0 -397
  443. package/core/dev/specs/peer-ansuz/DESIGN.md +0 -109
  444. package/core/dev/specs/peer-ansuz/spike/claude_poke.js +0 -129
  445. package/core/dev/specs/peer-ansuz/spike/claude_session_start_hook.js +0 -37
  446. package/core/dev/specs/peer-ansuz/spike/claude_settings_hook.json +0 -14
  447. package/core/dev/specs/peer-ansuz/spike/codex_appserver_client.js +0 -105
  448. package/core/dev/specs/peer-ansuz/spike/codex_appserver_query.js +0 -29
  449. package/core/dev/specs/peer-ansuz/spike/extract_timeline.js +0 -26
  450. package/core/dev/specs/synapse/SYMBOL_IDENTITY.md +0 -305
  451. package/core/dev/spikes/A4-cypher-varlen.md +0 -176
  452. package/core/dev/spikes/bloat-rounds.sh +0 -25
  453. package/core/dev/spikes/mods/clean-claude.js +0 -9
  454. package/core/dev/spikes/mods/drive-probe.js +0 -29
  455. package/core/dev/spikes/mods/e2e-peer.js +0 -71
  456. package/core/dev/spikes/mods/evidence/e2e-peer-control.json +0 -17
  457. package/core/dev/spikes/mods/evidence/e2e-peer-mod.json +0 -17
  458. package/core/dev/spikes/mods/evidence/probe-006a6e65-d807-4bc1-b648-fd7d1edfe0b4.jsonl +0 -4
  459. package/core/dev/spikes/mods/evidence/probe-cebdf1f7-f9c4-47a8-83cd-7c0786177404.jsonl +0 -12
  460. package/core/dev/spikes/mods/evidence/probe-eb21147d-10ce-4c32-93ed-37ca37d88d5a.jsonl +0 -11
  461. package/core/dev/spikes/mods/evidence/stream-cebdf1f7.jsonl +0 -18
  462. package/core/dev/spikes/mods/kenaz-mod-probe/.claude-plugin/plugin.json +0 -1
  463. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/hooks.json +0 -1
  464. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/register.ts +0 -65
  465. package/core/dev/spikes/mods/kenaz-mod-probe/tsconfig.json +0 -3
@@ -1,250 +0,0 @@
1
- brief_version: "1.0"
2
- task_id: TASK_1229
3
- title: "Implement Bifrost PreToolUse and PostToolUse hook dispatch"
4
- role: backend
5
- produced_by: TASK_1234
6
-
7
- # ─────────────────────────────────────────────────────────────────
8
- # CGDD RECONCILIATION (read this first)
9
- # ─────────────────────────────────────────────────────────────────
10
- cgdd_note: >
11
- CGDD_hook_lifecycle.js labels PreToolUse/PostToolUse contracts as 'TASK_1231',
12
- but the actual backlog assigns them to TASK_1229. FOLLOW THIS BRIEF.
13
- The phantom contract names are authoritative; the task number labels inside
14
- the CGDD are wrong. Relevant CGDD contracts for this task:
15
- relay_dispatchBifrostHook, relay_capturedThreadId, relay_normalizeToolEvent
16
-
17
- cgdd_source: ".formation/bifrost/CGDD_hook_lifecycle.js"
18
- lifecycle_contract_source: ".specialist/tools/task-bridge.js (BIFROST_HOOK_LIFECYCLE.PreToolUse + PostToolUse)"
19
-
20
- # ─────────────────────────────────────────────────────────────────
21
- # OBJECTIVE
22
- # ─────────────────────────────────────────────────────────────────
23
- objective: >
24
- Add PreToolUse and PostToolUse hook dispatch to relay.js (openai adapter).
25
- This is entirely self-contained in relay.js — no changes to session.js or
26
- task-bridge.js. Four tool types get two call sites each (8 total call sites):
27
- command_execution, file_edit, file_read, mcp_tool_call.
28
-
29
- # ─────────────────────────────────────────────────────────────────
30
- # OWNED FILES — only touch this
31
- # ─────────────────────────────────────────────────────────────────
32
- owned_files:
33
- primary: ".formation/bifrost/openai/relay.js"
34
- read_for_contract: ".specialist/tools/task-bridge.js"
35
- read_for_cgdd: ".formation/bifrost/CGDD_hook_lifecycle.js"
36
-
37
- # ─────────────────────────────────────────────────────────────────
38
- # NON-GOALS
39
- # ─────────────────────────────────────────────────────────────────
40
- non_goals:
41
- - Do NOT modify session.js (TASK_1228 owns dispatchBifrostHook there; TASK_1230 owns session lifecycle)
42
- - Do NOT modify task-bridge.js (PostToolUse routing already exists in handleHookEvent)
43
- - Do NOT implement SessionStart, UserPromptSubmit, or Stop (session.js events)
44
- - Do NOT change relay's stdin/stdout/stderr setup (TASK_1230 changes session.js stdio only)
45
- - Do NOT reconstruct tool events from transcript/logs — hooks must fire at real execution boundaries in translateEvent()
46
- - specialist field must be null — relay.js does not receive --specialist arg, do not invent it
47
-
48
- # ─────────────────────────────────────────────────────────────────
49
- # WHAT TO CREATE IN relay.js
50
- # ─────────────────────────────────────────────────────────────────
51
- module_additions:
52
- - name: capturedThreadId
53
- type: module_variable
54
- placement: "add after RESUME_ID constant declaration (around line 38)"
55
- declaration: "let capturedThreadId = null;"
56
- set_in: "translateEvent() thread.started case — add: capturedThreadId = event.thread_id || null;"
57
- used_in: "normalizeToolEvent() session_id field"
58
-
59
- - name: dispatchBifrostHook
60
- type: function
61
- signature: "function dispatchBifrostHook(eventName, payload)"
62
- placement: "add after the emit/emitToolResult utility functions (around line 63)"
63
- require_path: "path.resolve(__dirname, '../../..', '.specialist/tools/task-bridge.js')"
64
- body_skeleton: |
65
- function dispatchBifrostHook(eventName, payload) {
66
- try {
67
- const taskBridge = require(path.resolve(__dirname, '../../..', '.specialist/tools/task-bridge.js'));
68
- taskBridge.handleHookEvent(payload);
69
- } catch (err) {
70
- process.stderr.write(`[relay] hook dispatch failed (${eventName}): ${err.message}\n`);
71
- }
72
- }
73
- error_policy: "catch + process.stderr.write — must never interrupt emit() sequence"
74
- note: "This is a DIFFERENT function from session.js::dispatchBifrostHook — same pattern, different require path and different file"
75
-
76
- - name: normalizeToolEvent
77
- type: function
78
- signature: "function normalizeToolEvent(eventName, toolName, toolId, toolInput, toolResponse)"
79
- placement: "add after dispatchBifrostHook()"
80
- returns_pretooluse: |
81
- {
82
- hook_event_name: 'PreToolUse',
83
- tool_name: toolName,
84
- tool_id: toolId,
85
- tool_input: toolInput,
86
- session_id: capturedThreadId,
87
- specialist: null, // relay does not receive --specialist
88
- cwd: CWD,
89
- project_path: path.resolve(CWD),
90
- timestamp: new Date().toISOString(),
91
- }
92
- returns_posttooluse: |
93
- {
94
- hook_event_name: 'PostToolUse',
95
- tool_name: toolName,
96
- tool_id: toolId,
97
- tool_input: toolInput,
98
- tool_response: toolResponse,
99
- is_error: Boolean(toolResponse && (toolResponse.is_error || toolResponse.exit_code !== undefined && toolResponse.exit_code !== 0)),
100
- session_id: capturedThreadId,
101
- specialist: null,
102
- cwd: CWD,
103
- project_path: path.resolve(CWD),
104
- timestamp: new Date().toISOString(),
105
- }
106
-
107
- # ─────────────────────────────────────────────────────────────────
108
- # CALL SITES (8 total — 4 tool types × 2 events each)
109
- # ─────────────────────────────────────────────────────────────────
110
- call_sites:
111
- tool_name_mapping:
112
- command_execution: "Bash"
113
- file_edit: "Edit"
114
- file_read: "Read"
115
- mcp_tool_call: "mcp__<server>__<tool> (or use event.item.tool directly)"
116
-
117
- command_execution:
118
- pretooluse:
119
- location: "translateEvent() item.completed → command_execution branch, AFTER cmdId assignment, BEFORE emit(tool_use)"
120
- current_line_approx: 114
121
- payload_args: "'PreToolUse', 'Bash', cmdId, { command: event.item.command || '' }, null"
122
- call: "dispatchBifrostHook('PreToolUse', normalizeToolEvent('PreToolUse', 'Bash', cmdId, { command: event.item.command || '' }, null));"
123
- posttooluse:
124
- location: "AFTER emitToolResult(cmdId, ...) call"
125
- tool_response: "{ output: cmdOutput, exit_code: event.item.exit_code }"
126
- call: "dispatchBifrostHook('PostToolUse', normalizeToolEvent('PostToolUse', 'Bash', cmdId, { command: event.item.command || '' }, { output: cmdOutput, exit_code: event.item.exit_code }));"
127
-
128
- file_edit:
129
- pretooluse:
130
- location: "AFTER editId assignment, BEFORE emit(tool_use)"
131
- current_line_approx: 135
132
- call: "dispatchBifrostHook('PreToolUse', normalizeToolEvent('PreToolUse', 'Edit', editId, { file_path: event.item.file_path || '', description: event.item.description || '' }, null));"
133
- posttooluse:
134
- location: "AFTER emitToolResult(editId, ...) call"
135
- tool_response: "{ result: editResult, error: event.item.error || null }"
136
- call: "dispatchBifrostHook('PostToolUse', normalizeToolEvent('PostToolUse', 'Edit', editId, { file_path: event.item.file_path || '' }, { result: editResult, error: event.item.error || null }));"
137
-
138
- file_read:
139
- pretooluse:
140
- location: "AFTER readId assignment, BEFORE emit(tool_use)"
141
- current_line_approx: 158
142
- call: "dispatchBifrostHook('PreToolUse', normalizeToolEvent('PreToolUse', 'Read', readId, { file_path: event.item.file_path || '' }, null));"
143
- posttooluse:
144
- location: "AFTER emitToolResult(readId, ...) call"
145
- tool_response: "{ content: readContent, error: event.item.error || null }"
146
- call: "dispatchBifrostHook('PostToolUse', normalizeToolEvent('PostToolUse', 'Read', readId, { file_path: event.item.file_path || '' }, { content: readContent, error: event.item.error || null }));"
147
-
148
- mcp_tool_call:
149
- pretooluse:
150
- location: "AFTER mcpId/mcpName assignment, BEFORE emit(tool_use)"
151
- current_line_approx: 178
152
- call: "dispatchBifrostHook('PreToolUse', normalizeToolEvent('PreToolUse', mcpName, mcpId, event.item.arguments || {}, null));"
153
- posttooluse:
154
- location: "AFTER emitToolResult(mcpId, ...) call"
155
- tool_response: "{ result: mcpResult, error: event.item.error || null }"
156
- call: "dispatchBifrostHook('PostToolUse', normalizeToolEvent('PostToolUse', mcpName, mcpId, event.item.arguments || {}, { result: mcpResult, error: event.item.error || null }));"
157
-
158
- thread_started:
159
- capture: "add inside the thread.started case, after the existing emit() call: capturedThreadId = event.thread_id || null;"
160
-
161
- # ─────────────────────────────────────────────────────────────────
162
- # INVARIANTS
163
- # ─────────────────────────────────────────────────────────────────
164
- invariants:
165
- - "PreToolUse fires BEFORE emit(tool_use) — ordering is critical for hook consumers"
166
- - "PostToolUse fires AFTER emitToolResult() — both must be for the same tool_id"
167
- - "dispatchBifrostHook() must never throw or interrupt the emit() sequence"
168
- - "specialist must always be null in relay.js payloads — relay does not receive --specialist"
169
- - "capturedThreadId must be set before first tool call fires (thread.started always precedes item.completed)"
170
- - "Both PreToolUse and PostToolUse must include hook_event_name as discriminator"
171
- - "tool_id must be the SAME value for paired Pre/PostToolUse events (use the same cmdId/editId/readId/mcpId)"
172
-
173
- # ─────────────────────────────────────────────────────────────────
174
- # FORBIDDEN SHORTCUTS
175
- # ─────────────────────────────────────────────────────────────────
176
- forbidden:
177
- - "Do NOT fire hooks from item.started events — only item.completed (item.started is skipped per existing logic)"
178
- - "Do NOT reconstruct tool payloads from transcript or logs — hooks must use in-scope variables only"
179
- - "Do NOT spawn a child process to call task-bridge — use require() + handleHookEvent() directly"
180
- - "Do NOT add specialist field with a guessed value — null is correct and accepted by task-bridge"
181
- - "Do NOT change relay's codex spawn args or stdout piping — those belong to TASK_1230's session.js changes"
182
-
183
- # ─────────────────────────────────────────────────────────────────
184
- # VERIFICATION COMMANDS (Phase 9 style)
185
- # ─────────────────────────────────────────────────────────────────
186
- verification:
187
- grep_checks:
188
- - desc: "capturedThreadId module variable declared"
189
- cmd: "grep -n 'capturedThreadId' .formation/bifrost/openai/relay.js"
190
- expected: "declaration (let capturedThreadId = null) + set in thread.started + used in normalizeToolEvent"
191
-
192
- - desc: "dispatchBifrostHook function exists in relay.js"
193
- cmd: "grep -n 'function dispatchBifrostHook' .formation/bifrost/openai/relay.js"
194
- expected: "one match"
195
-
196
- - desc: "normalizeToolEvent function exists"
197
- cmd: "grep -n 'function normalizeToolEvent' .formation/bifrost/openai/relay.js"
198
- expected: "one match"
199
-
200
- - desc: "PreToolUse fires 4 times (once per tool type)"
201
- cmd: "grep -c 'PreToolUse' .formation/bifrost/openai/relay.js"
202
- expected: "at least 5 (1 in normalizeToolEvent return + 4 call sites)"
203
-
204
- - desc: "PostToolUse fires 4 times (once per tool type)"
205
- cmd: "grep -c 'PostToolUse' .formation/bifrost/openai/relay.js"
206
- expected: "at least 5"
207
-
208
- - desc: "require path for task-bridge is correct from relay.js depth"
209
- cmd: "grep -n 'task-bridge' .formation/bifrost/openai/relay.js"
210
- expected: "path.resolve(__dirname, '../../..', '.specialist/tools/task-bridge.js')"
211
-
212
- - desc: "specialist is null in relay payloads"
213
- cmd: "grep -n 'specialist.*null' .formation/bifrost/openai/relay.js"
214
- expected: "at least one match in normalizeToolEvent"
215
-
216
- ordering_check:
217
- - desc: "PreToolUse before emit in command_execution block"
218
- cmd: "grep -n 'PreToolUse\\|emit.*tool_use\\|cmdId' .formation/bifrost/openai/relay.js"
219
- expected: "dispatchBifrostHook PreToolUse line appears BEFORE emit(tool_use) line in command_execution block"
220
-
221
- integration_check:
222
- desc: "Dry-run PostToolUse through task-bridge"
223
- cmd: |
224
- node -e "
225
- const path = require('path');
226
- const tb = require('./.specialist/tools/task-bridge');
227
- const payload = {
228
- hook_event_name: 'PostToolUse',
229
- tool_name: 'Bash',
230
- tool_id: 'test_cmd_1',
231
- tool_input: { command: 'echo test' },
232
- tool_response: { output: 'test', exit_code: 0 },
233
- is_error: false,
234
- session_id: 'thread_test',
235
- specialist: null,
236
- cwd: process.cwd(),
237
- project_path: process.cwd(),
238
- timestamp: new Date().toISOString()
239
- };
240
- tb.handleHookEvent(payload).then(r => console.log('OK (no TaskCreate/Update in payload):', r)).catch(e => console.error('FAIL:', e.message));
241
- "
242
- expected: "OK: null (task-bridge no-ops for Bash, only acts on TaskCreate/TaskUpdate tool_name)"
243
-
244
- # ─────────────────────────────────────────────────────────────────
245
- # ORDERING
246
- # ─────────────────────────────────────────────────────────────────
247
- ordering:
248
- no_prerequisite: "This task is independent — dispatchBifrostHook lives in relay.js, not session.js, so TASK_1228 completion is not required before starting"
249
- can_run_in_parallel_with: "TASK_1228 (session.js only), TASK_1230 (session.js only)"
250
- must_complete_before: "TASK_1231 (verification gate)"
@@ -1,301 +0,0 @@
1
- brief_version: "1.0"
2
- task_id: TASK_1230
3
- title: "Implement Bifrost SessionStart and Stop parity for specialist session lifecycle"
4
- role: backend
5
- produced_by: TASK_1234
6
-
7
- # ─────────────────────────────────────────────────────────────────
8
- # CGDD RECONCILIATION (read this first)
9
- # ─────────────────────────────────────────────────────────────────
10
- cgdd_note: >
11
- CGDD_hook_lifecycle.js splits SessionStart (CGDD TASK_1228) and Stop (CGDD TASK_1230)
12
- into separate tasks. The actual backlog combines them into TASK_1230.
13
- FOLLOW THIS BRIEF. Relevant CGDD phantom contracts for this task:
14
- session_normalizeSessionStart, session_resultCapture, session_normalizeStop.
15
- The dispatchBifrostHook() function is NOT created here — TASK_1228 creates it.
16
- This task adds it to the two new call sites only.
17
-
18
- cgdd_source: ".formation/bifrost/CGDD_hook_lifecycle.js"
19
- lifecycle_contract_source: ".specialist/tools/task-bridge.js (BIFROST_HOOK_LIFECYCLE.SessionStart + Stop)"
20
-
21
- # ─────────────────────────────────────────────────────────────────
22
- # OBJECTIVE
23
- # ─────────────────────────────────────────────────────────────────
24
- objective: >
25
- Add SessionStart and Stop hook dispatch to session.js. SessionStart fires after
26
- writeSignal() and before launchRelay(). Stop fires in relay.on('close') before
27
- the existing reflex feedback block. Stop requires intercepting relay stdout to
28
- capture cost/token metrics from the result event — this is the only non-trivial
29
- wiring change in this task.
30
-
31
- prerequisite: "TASK_1228 must complete first — it creates dispatchBifrostHook() in session.js"
32
-
33
- # ─────────────────────────────────────────────────────────────────
34
- # OWNED FILES — only touch these
35
- # ─────────────────────────────────────────────────────────────────
36
- owned_files:
37
- primary: ".formation/bifrost/session.js"
38
- read_for_contract: ".specialist/tools/task-bridge.js"
39
- read_for_cgdd: ".formation/bifrost/CGDD_hook_lifecycle.js"
40
-
41
- # ─────────────────────────────────────────────────────────────────
42
- # NON-GOALS
43
- # ─────────────────────────────────────────────────────────────────
44
- non_goals:
45
- - Do NOT create dispatchBifrostHook() — TASK_1228 already created it
46
- - Do NOT modify relay.js (TASK_1229 owns that file)
47
- - Do NOT modify task-bridge.js (handleHookEvent fall-through for SessionStart/Stop is already safe)
48
- - Do NOT redefine payload schema (frozen in BIFROST_HOOK_LIFECYCLE)
49
- - Do NOT change the logic inside the reflex feedback try/catch block (lines ~124-173) — Stop fires BEFORE it, not inside it
50
-
51
- # ─────────────────────────────────────────────────────────────────
52
- # WHAT TO ADD IN session.js
53
- # ─────────────────────────────────────────────────────────────────
54
- module_additions:
55
- - name: sessionStartedAt
56
- type: module_variable
57
- placement: "add near top after SIGNAL_PATH constant"
58
- declaration: "let sessionStartedAt = null;"
59
- set_in: "normalizeSessionStart() — set sessionStartedAt = new Date().toISOString() before returning payload"
60
- used_in: "normalizeStop() started_at field"
61
-
62
- - name: resultCapture
63
- type: module_variable
64
- placement: "add after sessionStartedAt"
65
- declaration: "const resultCapture = { total_cost_usd: 0, num_turns: 0, input_tokens: 0, output_tokens: 0 };"
66
- set_in: "relay stdout 'data' event handler added by this task"
67
- used_in: "normalizeStop() cost + token fields"
68
- critical: "resultCapture starts as zero — Stop payload will have zeroes if stdout capture fails (acceptable degradation)"
69
-
70
- functions_to_create:
71
- - name: normalizeSessionStart
72
- signature: "function normalizeSessionStart()"
73
- placement: "add after dispatchBifrostHook() (created by TASK_1228)"
74
- body: |
75
- function normalizeSessionStart() {
76
- sessionStartedAt = new Date().toISOString();
77
- return {
78
- hook_event_name: 'SessionStart',
79
- specialist: SPECIALIST,
80
- adapter: ADAPTER,
81
- model: MODEL,
82
- cwd: CWD,
83
- pid: process.pid,
84
- session_id: RESUME_ID,
85
- started_at: sessionStartedAt,
86
- project_path: path.resolve(CWD),
87
- };
88
- }
89
- side_effect: "sets module-level sessionStartedAt — this is intentional"
90
-
91
- - name: normalizeStop
92
- signature: "function normalizeStop(code, startedAt)"
93
- placement: "add after normalizeSessionStart()"
94
- body: |
95
- function normalizeStop(code, startedAt) {
96
- return {
97
- hook_event_name: 'Stop',
98
- specialist: SPECIALIST,
99
- adapter: ADAPTER,
100
- exit_code: code || 0,
101
- is_error: (code || 0) !== 0,
102
- session_id: RESUME_ID,
103
- total_cost_usd: resultCapture.total_cost_usd,
104
- num_turns: resultCapture.num_turns,
105
- input_tokens: resultCapture.input_tokens,
106
- output_tokens: resultCapture.output_tokens,
107
- started_at: startedAt,
108
- ended_at: new Date().toISOString(),
109
- cwd: CWD,
110
- project_path: path.resolve(CWD),
111
- };
112
- }
113
-
114
- # ─────────────────────────────────────────────────────────────────
115
- # CALL SITES
116
- # ─────────────────────────────────────────────────────────────────
117
- call_sites:
118
- sessionstart:
119
- location: "main execution block (bottom of file)"
120
- current_code: |
121
- if (RESUME_ID) {
122
- writeSignal();
123
- ...
124
- launchRelay(userMsg);
125
- } else {
126
- ...
127
- writeSignal();
128
- launchRelay(prompt);
129
- }
130
- target_code: |
131
- if (RESUME_ID) {
132
- writeSignal();
133
- dispatchBifrostHook('SessionStart', normalizeSessionStart());
134
- ...
135
- launchRelay(userMsg);
136
- } else {
137
- ...
138
- writeSignal();
139
- dispatchBifrostHook('SessionStart', normalizeSessionStart());
140
- launchRelay(prompt);
141
- }
142
- ordering_invariant: "SessionStart AFTER writeSignal(), BEFORE launchRelay()"
143
- ordering_with_userpromptsubmit: "If TASK_1228 already added UserPromptSubmit dispatch, SessionStart must come BEFORE it: writeSignal() → SessionStart → UserPromptSubmit → launchRelay()"
144
-
145
- stop:
146
- location: "relay.on('close') handler in launchRelay() function (current lines ~119-176)"
147
- current_code: |
148
- relay.on('close', (code) => {
149
- cleanupSignal();
150
- try {
151
- // ... reflex feedback block (lines ~124-173)
152
- } catch (err) {
153
- console.error(`[bifrost] Reflex feedback skipped: ${err.message}`);
154
- }
155
- process.exit(code || 0);
156
- });
157
- target_code: |
158
- relay.on('close', (code) => {
159
- cleanupSignal();
160
- dispatchBifrostHook('Stop', normalizeStop(code, sessionStartedAt)); // ← ADD THIS LINE
161
- try {
162
- // ... reflex feedback block (unchanged)
163
- } catch (err) {
164
- console.error(`[bifrost] Reflex feedback skipped: ${err.message}`);
165
- }
166
- process.exit(code || 0);
167
- });
168
- ordering_invariant: "Stop fires BEFORE reflex feedback block and BEFORE process.exit"
169
-
170
- stdout_capture:
171
- description: "Change relay stdio and intercept result events to populate resultCapture"
172
- current_spawn: |
173
- const relay = spawn('node', [relayScript, ...relayArgs], {
174
- cwd: CWD,
175
- stdio: ['pipe', 'inherit', 'inherit'],
176
- windowsHide: true
177
- });
178
- target_spawn: |
179
- const relay = spawn('node', [relayScript, ...relayArgs], {
180
- cwd: CWD,
181
- stdio: ['pipe', 'pipe', 'inherit'], // ← change 'inherit' to 'pipe' for stdout
182
- windowsHide: true
183
- });
184
- add_after_spawn: |
185
- // Tee relay stdout: forward to process.stdout AND intercept result lines
186
- let stdoutBuffer = '';
187
- relay.stdout.on('data', (chunk) => {
188
- process.stdout.write(chunk); // forward as-is (preserve downstream consumers)
189
- stdoutBuffer += chunk.toString();
190
- const lines = stdoutBuffer.split('\n');
191
- stdoutBuffer = lines.pop();
192
- for (const line of lines) {
193
- if (!line.trim()) continue;
194
- try {
195
- const parsed = JSON.parse(line);
196
- if (parsed.type === 'result') {
197
- resultCapture.total_cost_usd = parsed.total_cost_usd || 0;
198
- resultCapture.num_turns = parsed.num_turns || 0;
199
- resultCapture.input_tokens = (parsed.usage && parsed.usage.input_tokens) || parsed.input_tokens || 0;
200
- resultCapture.output_tokens = (parsed.usage && parsed.usage.output_tokens) || parsed.output_tokens || 0;
201
- }
202
- } catch { /* non-JSON line — already forwarded */ }
203
- }
204
- });
205
- critical: >
206
- relay stdout is currently 'inherit' — changing it to 'pipe' is necessary
207
- to intercept the result event for cost/token capture. The manual tee
208
- (process.stdout.write(chunk)) preserves all existing downstream behavior.
209
- This is the only non-trivial change in this entire task.
210
-
211
- # ─────────────────────────────────────────────────────────────────
212
- # INVARIANTS
213
- # ─────────────────────────────────────────────────────────────────
214
- invariants:
215
- - "SessionStart fires exactly once per session.js invocation, on both RESUME_ID and fresh-session paths"
216
- - "Stop fires exactly once, in relay.on('close'), BEFORE the reflex feedback block"
217
- - "sessionStartedAt is captured inside normalizeSessionStart() — not at a different time"
218
- - "resultCapture gracefully degrades to all-zeros if no result event is intercepted"
219
- - "relay stdout must be forwarded to process.stdout unchanged — no content filtering"
220
- - "dispatchBifrostHook() must not throw — existing try/catch from TASK_1228 covers this"
221
-
222
- # ─────────────────────────────────────────────────────────────────
223
- # FORBIDDEN SHORTCUTS
224
- # ─────────────────────────────────────────────────────────────────
225
- forbidden:
226
- - "Do NOT place Stop inside the reflex feedback try/catch — Stop must fire even if reflex logic fails"
227
- - "Do NOT use process.on('exit') or process.on('SIGTERM') as the Stop call site — must be relay.on('close')"
228
- - "Do NOT set relay stdout to 'ignore' — downstream consumers depend on relay output"
229
- - "Do NOT recreate dispatchBifrostHook() — reuse what TASK_1228 created"
230
- - "Do NOT capture resultCapture inside the reflex block — it must be set before Stop fires"
231
-
232
- # ─────────────────────────────────────────────────────────────────
233
- # VERIFICATION COMMANDS (Phase 9 style)
234
- # ─────────────────────────────────────────────────────────────────
235
- verification:
236
- grep_checks:
237
- - desc: "normalizeSessionStart function exists"
238
- cmd: "grep -n 'function normalizeSessionStart' .formation/bifrost/session.js"
239
- expected: "one match"
240
-
241
- - desc: "normalizeStop function exists"
242
- cmd: "grep -n 'function normalizeStop' .formation/bifrost/session.js"
243
- expected: "one match"
244
-
245
- - desc: "sessionStartedAt module variable declared"
246
- cmd: "grep -n 'sessionStartedAt' .formation/bifrost/session.js"
247
- expected: "at least 3 matches: declaration, set in normalizeSessionStart, used in normalizeStop call"
248
-
249
- - desc: "resultCapture module variable declared"
250
- cmd: "grep -n 'resultCapture' .formation/bifrost/session.js"
251
- expected: "at least 4 matches: declaration, 4 field assignments, used in normalizeStop"
252
-
253
- - desc: "relay stdio changed to pipe for stdout"
254
- cmd: "grep -n \"stdio.*pipe.*pipe\\|'pipe', 'pipe'\" .formation/bifrost/session.js"
255
- expected: "match showing stdout changed from 'inherit' to 'pipe'"
256
-
257
- - desc: "relay.stdout.on data handler exists (tee)"
258
- cmd: "grep -n 'relay.stdout.on' .formation/bifrost/session.js"
259
- expected: "one match"
260
-
261
- - desc: "Stop dispatch wired before reflex block"
262
- cmd: "grep -n \"dispatchBifrostHook.*Stop\\|reflex feedback\\|cleanupSignal\" .formation/bifrost/session.js"
263
- expected: "cleanupSignal() first, then Stop dispatch, then reflex feedback comment — in that order"
264
-
265
- - desc: "SessionStart wired on both code paths"
266
- cmd: "grep -n 'SessionStart' .formation/bifrost/session.js"
267
- expected: "at least 2 dispatch call sites (RESUME_ID path + fresh-session path) plus normalizeSessionStart body"
268
-
269
- ordering_proof:
270
- - desc: "Verify SessionStart fires before UserPromptSubmit (if TASK_1228 already done)"
271
- cmd: "node -e \"const src = require('fs').readFileSync('.formation/bifrost/session.js','utf8'); const ssIdx = src.lastIndexOf('SessionStart'); const upsIdx = src.lastIndexOf('UserPromptSubmit'); console.log('SessionStart at:', ssIdx, 'UserPromptSubmit at:', upsIdx, 'Correct order:', ssIdx < upsIdx);\""
272
- expected: "Correct order: true"
273
-
274
- integration_check:
275
- desc: "Dry-run SessionStart through task-bridge (no-op expected)"
276
- cmd: |
277
- node -e "
278
- const tb = require('./.specialist/tools/task-bridge');
279
- const payload = {
280
- hook_event_name: 'SessionStart',
281
- specialist: 'Ansuz',
282
- adapter: 'openai',
283
- model: null,
284
- cwd: process.cwd(),
285
- pid: process.pid,
286
- session_id: null,
287
- started_at: new Date().toISOString(),
288
- project_path: process.cwd(),
289
- };
290
- tb.handleHookEvent(payload).then(r => console.log('OK (no-op):', r)).catch(e => console.error('FAIL:', e.message));
291
- "
292
- expected: "OK (no-op): null"
293
-
294
- # ─────────────────────────────────────────────────────────────────
295
- # ORDERING
296
- # ─────────────────────────────────────────────────────────────────
297
- ordering:
298
- prerequisite: "TASK_1228 must complete first (creates dispatchBifrostHook in session.js)"
299
- can_run_in_parallel_with: "TASK_1229 (relay.js only — no file overlap)"
300
- must_complete_before: "TASK_1231 (verification gate)"
301
- final_hook_ordering_in_session_js: "writeSignal() → SessionStart → UserPromptSubmit → launchRelay() → [relay runs] → Stop → reflex block → process.exit()"