kenaz 0.3.22 → 0.3.24

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 (474) 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 +11 -29
  4. package/core/.claude/hooks/worktree-remove.js +12 -38
  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/dispatch-detail/worktree-subagent-mode.md +6 -1
  10. package/core/.formation/tools/kenaz-stats.js +1 -1
  11. package/core/.formation/tools/post-complete/git-merge.js +1 -1
  12. package/core/.formation/tools/prompt.js +1 -1
  13. package/core/.formation/tools/utils.js +5 -5
  14. package/core/.formation/tools/worktree-reclaim.js +73 -2
  15. package/core/.formation/tools/worktree-reclaim.test.js +113 -0
  16. package/core/.kenaz/specialist/ansuz_rules.yaml +7 -51
  17. package/core/.kenaz/specialist/ansuz_session_handoff.schema.json +2 -6
  18. package/core/.rule/general/project-self-containment.yaml +2 -2
  19. package/core/.specialist/Amelia/README.md +1 -1
  20. package/core/.specialist/Amelia/rule.yaml +1 -1
  21. package/core/.specialist/Ansuz/RULES.md +6 -2
  22. package/core/.specialist/Ansuz/concepts/commitment_layer.yaml +1 -1
  23. package/core/.specialist/Ansuz/concepts/evolvable_guardrails.yaml +1 -1
  24. package/core/.specialist/Ansuz/knowledge.yaml +1 -3
  25. package/core/.specialist/tools/__tests__/task-2409-lessons.test.js +10 -0
  26. package/core/.specialist/tools/__tests__/task-2427-harvest.test.js +25 -0
  27. package/core/.specialist/tools/ansuz-boot-fast.js +1 -1
  28. package/core/.specialist/tools/failure-detector.js +4 -4
  29. package/core/.specialist/tools/handoff-doc.js +1 -1
  30. package/core/.specialist/tools/lessons.js +2 -2
  31. package/core/CLAUDE.md +5 -5
  32. package/core/KENAZ_CORE_VERSION +1 -1
  33. package/core/dashboard/scripts/install-kenaz-cli.js +56 -30
  34. package/core/dev/scripts/check-file-size.js +1 -1
  35. package/core/dev/scripts/ci-feedback.js +1 -1
  36. package/core/dev/scripts/gc-agent-worktrees.js +13 -12
  37. package/core/dev/scripts/kenaz-session.js +3 -3
  38. package/core/dev/scripts/peer-identity-e2e.js +6 -4
  39. package/core/dev/scripts/run-rust-tests.js +2 -2
  40. package/core/dev/scripts/skill-routing-replay.js +3 -3
  41. package/core/dev/scripts/task1961/selftest.js +2 -2
  42. package/core/dev/scripts/windows-hide-guard.test.js +112 -0
  43. package/core/plugins/kenaz/guidance.md +1 -0
  44. package/core/plugins/kenaz/hooks/core-resolve.js +1 -1
  45. package/core/plugins/kenaz/hooks/hooks.json +9 -0
  46. package/core/plugins/kenaz/hooks/kenaz-hook.js +58 -4
  47. package/core/plugins/kenaz/hooks/worktree-guard.js +121 -0
  48. package/core/plugins/kenaz/hooks/worktree-guard.test.js +75 -0
  49. package/core/plugins/kenaz/scripts/kenaz.test.js +72 -5
  50. package/core/plugins/kenaz-peer/hooks/register.test.ts +14 -2
  51. package/core/plugins/kenaz-peer/hooks/register.ts +6 -1
  52. package/lib/cli.js +9 -5
  53. package/package.json +6 -6
  54. package/vendor/install-kenaz-cli.js +56 -30
  55. package/core/.kenaz/designs/METAPLASTICITY_CONFIDENCE_DESIGN.md +0 -537
  56. package/core/.kenaz/designs/REFLEX_INITIATOR_DESIGN.md +0 -501
  57. package/core/.kenaz/designs/TASK_1385_handoff_mcp_design.md +0 -426
  58. package/core/.kenaz/designs/TASK_932_hippocampus_consolidation.md +0 -103
  59. package/core/.kenaz/designs/TASK_934_efe_signal_engine.md +0 -97
  60. package/core/.kenaz/designs/TASK_935_self_evolution_framework.md +0 -154
  61. package/core/.kenaz/designs/VISION_cognitive_architecture_roadmap.md +0 -159
  62. package/core/.kenaz/designs/metaplasticity_simulation_results.json +0 -696
  63. package/core/.kenaz/main-memory/README.md +0 -230
  64. package/core/.kenaz/main-memory/kenaz/cortex/001_cortex_overview.md +0 -168
  65. package/core/.kenaz/main-memory/kenaz/cortex/001_rag_engine_overview.md +0 -30
  66. package/core/.kenaz/main-memory/kenaz/memory-system/001_three_tier_architecture.md +0 -361
  67. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_execution_flow.md +0 -117
  68. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_granularity.md +0 -154
  69. package/core/.kenaz/main-memory/kenaz/pipeline/002_team_priority.md +0 -51
  70. package/core/.kenaz/main-memory/kenaz/pipeline/003_feature_id_system.md +0 -46
  71. package/core/.kenaz/main-memory/kenaz/rules/001_gen_007_self_containment.md +0 -108
  72. package/core/.kenaz/main-memory/kenaz/rules/001_rule_priority_system.md +0 -121
  73. package/core/.kenaz/main-memory/kenaz/rules/002_agt_006_pre_check.md +0 -0
  74. package/core/.kenaz/main-memory/kenaz/rules/003_ppl_002_task_archival.md +0 -48
  75. package/core/.kenaz/main-memory/kenaz/system/001_dual_track_task_system.md +0 -197
  76. package/core/.kenaz/main-memory/knowledge/patterns/001_json_bom_issue.md +0 -78
  77. package/core/.kenaz/main-memory/knowledge/patterns/001_leader_worker_pattern.md +0 -0
  78. package/core/.kenaz/main-memory/knowledge/patterns/002_scope_path_conflict.md +0 -115
  79. package/core/.kenaz/main-memory/knowledge/patterns/002_task_dependency_resolution.md +0 -223
  80. package/core/.kenaz/main-memory/knowledge/patterns/003_question_protocol.md +0 -242
  81. package/core/.kenaz/main-memory/knowledge/patterns/004_user_insight_value.md +0 -111
  82. package/core/.kenaz/main-memory/knowledge/patterns/005_file_lock_pattern.md +0 -274
  83. package/core/.kenaz/main-memory/knowledge/references/001_ppl_rules.md +0 -28
  84. package/core/.kenaz/main-memory/knowledge/solutions/001_json_bom_issue.md +0 -137
  85. package/core/.kenaz/main-memory/knowledge/solutions/001_team_invocation.md +0 -0
  86. package/core/.kenaz/main-memory/knowledge/solutions/002_passive_monitoring.md +0 -0
  87. package/core/.kenaz/main-memory/knowledge/solutions/003_windows_file_race_condition.md +0 -239
  88. package/core/.kenaz/main-memory/registry.json +0 -326
  89. package/core/.kenaz/main-memory/version.yaml +0 -58
  90. package/core/.kenaz/specialist/memory_guard_fired.json +0 -1
  91. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +0 -1
  92. package/core/.kenaz/specialist/memory_source_priority.yaml +0 -260
  93. package/core/.kenaz/specialist/prompt_1775.txt +0 -317
  94. package/core/.kenaz/specialist/prompt_1776.txt +0 -326
  95. package/core/.kenaz/specialist/prompt_1791.txt +0 -320
  96. package/core/.kenaz/specialist/prompt_1792.txt +0 -320
  97. package/core/.kenaz/specialist/prompt_1795.txt +0 -281
  98. package/core/.kenaz/specialist/prompt_1813.txt +0 -332
  99. package/core/.kenaz/specialist/prompt_1814.txt +0 -401
  100. package/core/.kenaz/specialist/prompt_1815.txt +0 -394
  101. package/core/.kenaz/specialist/prompt_1816.txt +0 -437
  102. package/core/.kenaz/specialist/prompt_1818.txt +0 -361
  103. package/core/.kenaz/specialist/prompt_1819.txt +0 -421
  104. package/core/.kenaz/specialist/prompt_1821.txt +0 -345
  105. package/core/.kenaz/specialist/prompt_1822.txt +0 -313
  106. package/core/.kenaz/specialist/prompt_1824.txt +0 -348
  107. package/core/.kenaz/specialist/prompt_1826.txt +0 -388
  108. package/core/.kenaz/specialist/rune_efe_salience_gap.md +0 -21
  109. package/core/.kenaz/specialist/task1825_update.json +0 -43
  110. package/core/.kenaz/specialist/taskgen/consolidation_i.json +0 -38
  111. package/core/.kenaz/specialist/taskgen/csharp_a.json +0 -44
  112. package/core/.kenaz/specialist/taskgen/csharp_b.json +0 -40
  113. package/core/.kenaz/specialist/taskgen/embedding_e.json +0 -34
  114. package/core/.kenaz/specialist/taskgen/hygiene_fg.json +0 -39
  115. package/core/.kenaz/specialist/taskgen/pathology_h.json +0 -36
  116. package/core/.kenaz/specialist/taskgen/unity_noise_d.json +0 -38
  117. package/core/.kenaz/specialist/taskgen/visibility_c.json +0 -38
  118. package/core/.specialist/Ansuz/decisions/ADR-requirement-graph-layer.md +0 -390
  119. package/core/.specialist/Ansuz/self_model_seed.backup.json +0 -100
  120. package/core/.specialist/ansuz_session_handoff.json +0 -96
  121. package/core/dev/ALAYA_FIELD_FEEDBACK_DESIGN.md +0 -126
  122. package/core/dev/ANSUZ_SCAFFOLD_DIET_2026-09-20.md +0 -231
  123. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +0 -355
  124. package/core/dev/ANSUZ_WORKFLOW_MODERNIZATION.md +0 -143
  125. package/core/dev/CORTEX_META_GRAPH_ASSESSMENT.md +0 -99
  126. package/core/dev/FREYA_DOWNSTREAM_BUGS_2026-09-19.md +0 -44
  127. package/core/dev/GLOBAL_MEMORY_IDENTITY_CONSOLIDATION.md +0 -263
  128. package/core/dev/GUARD_EFFECTIVENESS_DESIGN.md +0 -180
  129. package/core/dev/HEALTH_GATE_VARIANCE_ASSESSMENT.md +0 -271
  130. package/core/dev/HOOK_DIET_2026-09-21.md +0 -126
  131. package/core/dev/JEV_INTEGRATION_PLAN.md +0 -189
  132. package/core/dev/KENAZ_AGENT_CONNECT_v1_SPEC.md +0 -139
  133. package/core/dev/MOBILE_DESIGN_SPEC.md +0 -569
  134. package/core/dev/MULTI_ANSUZ_SPEC.md +0 -136
  135. package/core/dev/MUNINN_RETIREMENT.md +0 -115
  136. package/core/dev/PHASE3_ATTRIBUTION_POPULATION_DIAGNOSIS.md +0 -211
  137. package/core/dev/PHASE3_P3-2B_TASKLEVEL_PROBE.md +0 -83
  138. package/core/dev/PHASE3_P3-2_POPULATION_DISJOINTNESS.md +0 -83
  139. package/core/dev/PHASE3_P3-2_REMEASURE_REPORT.md +0 -231
  140. package/core/dev/PREDICTION_GROUNDING_DESIGN.md +0 -376
  141. package/core/dev/PRODUCT_SPEC.md +0 -317
  142. package/core/dev/PROJECT_REGISTRY_DUPLICATE_ASSESSMENT.md +0 -86
  143. package/core/dev/STARTUP_TIMELINE_TASK_1995.md +0 -181
  144. package/core/dev/SYNAPSE_WORKER_PER_PROJECT.md +0 -881
  145. package/core/dev/TASK_1680_P3-3_DISPATCH_SPEC.md +0 -96
  146. package/core/dev/TASK_1684_CALIBRATION_IMPACT_ANALYSIS.md +0 -170
  147. package/core/dev/TASK_1684_FORK_A_GOODHART_DESIGN.md +0 -171
  148. package/core/dev/TASK_1684_P3_2_REMEASURE_VALIDATION.md +0 -262
  149. package/core/dev/TASK_1903_SIGNAL_AUC_MEASUREMENT.md +0 -207
  150. package/core/dev/TASK_1904_BRANCH_INTEGRITY_AUDIT.md +0 -146
  151. package/core/dev/ansuz-eval/README.md +0 -38
  152. package/core/dev/ansuz-eval/build-fixtures.js +0 -87
  153. package/core/dev/ansuz-eval/grade.js +0 -96
  154. package/core/dev/ansuz-eval/grader.test.js +0 -117
  155. package/core/dev/ansuz-eval/tasks.md +0 -32
  156. package/core/dev/archive/ansuz/BOOT_FULL.md +0 -141
  157. package/core/dev/archive/ansuz/agents/ansuz-boot.md +0 -176
  158. package/core/dev/archive/ansuz/designs/alaya-passive-surfacing.md +0 -84
  159. package/core/dev/archive/ansuz/designs/cc_memory_indexing.md +0 -307
  160. package/core/dev/archive/ansuz/designs/check_guard.md +0 -322
  161. package/core/dev/archive/ansuz/designs/consequence_loop.md +0 -227
  162. package/core/dev/archive/ansuz/designs/mcp_kuzudb_lock_architecture.md +0 -312
  163. package/core/dev/archive/ansuz/designs/phase0_git_enrichment.md +0 -278
  164. package/core/dev/archive/ansuz/designs/refactor_mcp_tools_synapse.md +0 -490
  165. package/core/dev/archive/ansuz/designs/semantic_markdown_extraction.md +0 -167
  166. package/core/dev/archive/ansuz/designs/task_1372_prompt_injects_into.md +0 -193
  167. package/core/dev/archive/ansuz/designs/thought_stack.md +0 -286
  168. package/core/dev/archive/ansuz/investigations/reachability_unified_api_2026-04-11.md +0 -330
  169. package/core/dev/archive/ansuz/investigations/synapse_orphans_indexing_bug_2026-04-11.md +0 -352
  170. package/core/dev/archive/ansuz/investigations/synapse_orphans_reindex_verification_2026-04-11.md +0 -48
  171. package/core/dev/archive/ansuz/investigations/synapse_orphans_verification_2026-04-11.md +0 -170
  172. package/core/dev/archive/ansuz/legacy/kernel.yaml +0 -399
  173. package/core/dev/archive/ansuz/legacy/phases/phase_0.yaml +0 -418
  174. package/core/dev/archive/ansuz/legacy/phases/phase_1.yaml +0 -376
  175. package/core/dev/archive/ansuz/legacy/phases/phase_10.yaml +0 -35
  176. package/core/dev/archive/ansuz/legacy/phases/phase_11.yaml +0 -582
  177. package/core/dev/archive/ansuz/legacy/phases/phase_2.yaml +0 -94
  178. package/core/dev/archive/ansuz/legacy/phases/phase_3.yaml +0 -274
  179. package/core/dev/archive/ansuz/legacy/phases/phase_4.yaml +0 -67
  180. package/core/dev/archive/ansuz/legacy/phases/phase_5.yaml +0 -32
  181. package/core/dev/archive/ansuz/legacy/phases/phase_6.yaml +0 -91
  182. package/core/dev/archive/ansuz/legacy/phases/phase_7.yaml +0 -58
  183. package/core/dev/archive/ansuz/legacy/phases/phase_8.yaml +0 -146
  184. package/core/dev/archive/ansuz/legacy/phases/phase_9.yaml +0 -424
  185. package/core/dev/archive/ansuz/specs/INDEX_bifrost_hook_parity.yaml +0 -92
  186. package/core/dev/archive/ansuz/specs/active-inference-formation.yaml +0 -453
  187. package/core/dev/archive/ansuz/specs/brief_TASK_1228_userpromptsubmit.yaml +0 -191
  188. package/core/dev/archive/ansuz/specs/brief_TASK_1229_pretooluse_posttooluse.yaml +0 -250
  189. package/core/dev/archive/ansuz/specs/brief_TASK_1230_sessionstart_stop.yaml +0 -301
  190. package/core/dev/archive/ansuz/specs/brief_TASK_1231_verification.yaml +0 -272
  191. package/core/dev/archive/skills/feature_agent/SKILL.md +0 -289
  192. package/core/dev/design/PHASE4_DESIGN.md +0 -559
  193. package/core/dev/design/dashboard_docs_integration_PLAN.md +0 -388
  194. package/core/dev/design/matrix_format_ABBREVIATIONS.md +0 -655
  195. package/core/dev/design/matrix_format_DESIGN_SPEC.md +0 -601
  196. package/core/dev/design/matrix_format_DISCUSSION_SUMMARY.md +0 -484
  197. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +0 -13
  198. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +0 -9
  199. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +0 -14
  200. package/core/dev/design/matrix_format_SYNTAX_BNF.md +0 -754
  201. package/core/dev/design/matrix_format_TOKEN_COMPARISON.md +0 -484
  202. package/core/dev/design/matrix_v2_COGNITIVE_DESIGN.md +0 -503
  203. package/core/dev/design/matrix_v2_DISCUSSION_SUMMARY.md +0 -414
  204. package/core/dev/design/matrix_v2_EXAMPLE.matrix +0 -67
  205. package/core/dev/designs/EXPANDABLE_CARD_DESIGN_SPEC.md +0 -509
  206. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +0 -52
  207. package/core/dev/jev-eval/ANNOTATION_GUIDE.md +0 -68
  208. package/core/dev/jev-eval/BASELINE_COMPARISON.md +0 -45
  209. package/core/dev/jev-eval/CONTEXT_REVIEW.md +0 -31
  210. package/core/dev/jev-eval/EVALUATION_STATUS.md +0 -39
  211. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +0 -33
  212. package/core/dev/jev-eval/PACKAGING_VERIFICATION.md +0 -42
  213. package/core/dev/jev-eval/README.md +0 -101
  214. package/core/dev/jev-eval/THALAMUS_RANKING.md +0 -58
  215. package/core/dev/jev-eval/VALIDATION_PROGRESS.md +0 -54
  216. package/core/dev/jev-eval/cli.mjs +0 -50
  217. package/core/dev/jev-eval/context.mjs +0 -183
  218. package/core/dev/jev-eval/corpus.mjs +0 -186
  219. package/core/dev/jev-eval/fixtures/conversation-review.seed.jsonl +0 -6
  220. package/core/dev/jev-eval/fixtures/synthetic.jsonl +0 -11
  221. package/core/dev/jev-eval/metrics.mjs +0 -67
  222. package/core/dev/jev-eval/muninn-baseline.mjs +0 -119
  223. package/core/dev/jev-eval/providers.mjs +0 -95
  224. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +0 -32
  225. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +0 -48
  226. package/core/dev/jev-eval/reports/conversation-review.pending.json +0 -151
  227. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +0 -52
  228. package/core/dev/jev-eval/reports/length-probe-2026-09-20.json +0 -133
  229. package/core/dev/jev-eval/reports/live-smoke-2026-09-20.json +0 -616
  230. package/core/dev/jev-eval/reports/muninn-baseline-2026-09-20.json +0 -52
  231. package/core/dev/jev-eval/reports/resilience-2026-09-20.json +0 -520
  232. package/core/dev/jev-eval/reports/rules-baseline.json +0 -197
  233. package/core/dev/jev-eval/reports/synthetic-review.pending.json +0 -357
  234. package/core/dev/jev-eval/resilience.mjs +0 -71
  235. package/core/dev/jev-eval/review.mjs +0 -78
  236. package/core/dev/jev-eval/schema.mjs +0 -87
  237. package/core/dev/jev-eval/test/context.test.mjs +0 -95
  238. package/core/dev/jev-eval/test/corpus.test.mjs +0 -102
  239. package/core/dev/jev-eval/test/eval.test.mjs +0 -146
  240. package/core/dev/jev-eval/test/muninn-baseline.test.mjs +0 -71
  241. package/core/dev/jev-eval/test/resilience.test.mjs +0 -72
  242. package/core/dev/jev-eval/test/review.test.mjs +0 -61
  243. package/core/dev/pipeline/PHASE3_PLANNING_SUMMARY.md +0 -338
  244. package/core/dev/pipeline/PROGRESS.md +0 -113
  245. package/core/dev/pipeline/PROGRESS_template.md +0 -860
  246. package/core/dev/pipeline/QA_REPORT_F008.md +0 -431
  247. package/core/dev/pipeline/QA_REPORT_LOCAL_CLAUDE_DIAGNOSIS.md +0 -583
  248. package/core/dev/pipeline/README.md +0 -210
  249. package/core/dev/pipeline/WORKFLOW_GUIDE.md +0 -824
  250. package/core/dev/pipeline/archived/TASK_015_tauri_init.yaml +0 -53
  251. package/core/dev/pipeline/archived/TASK_016_tauri_commands.yaml +0 -54
  252. package/core/dev/pipeline/archived/TASK_017_rust_pty.yaml +0 -54
  253. package/core/dev/pipeline/archived/TASK_018_tauri_bundle.yaml +0 -53
  254. package/core/dev/pipeline/archived/TASK_019_release_workflow.yaml +0 -56
  255. package/core/dev/pipeline/archived/TASK_020_update_ui.yaml +0 -54
  256. package/core/dev/pipeline/archived/TASK_021_update_notification_ui.yaml +0 -55
  257. package/core/dev/pipeline/archived/TASK_022_remove_node_pty.yaml +0 -65
  258. package/core/dev/pipeline/archived/TASK_023_api_routes_migration.yaml +0 -86
  259. package/core/dev/pipeline/archived/TASK_024_feature_id_system.yaml +0 -51
  260. package/core/dev/pipeline/archived/TASK_025_executable_acceptance.yaml +0 -66
  261. package/core/dev/pipeline/archived/TASK_026_spec_versioning.yaml +0 -56
  262. package/core/dev/pipeline/archived/TASK_027_drift_detection.yaml +0 -60
  263. package/core/dev/pipeline/archived/TASK_028_tauri_pty_manager.yaml +0 -60
  264. package/core/dev/pipeline/archived/TASK_029_tauri_pty_commands.yaml +0 -62
  265. package/core/dev/pipeline/archived/TASK_030_frontend_session_adapter.yaml +0 -54
  266. package/core/dev/pipeline/archived/TASK_031_terminal_tauri_events.yaml +0 -56
  267. package/core/dev/pipeline/archived/TASK_041_scheduler_data_models.yaml +0 -54
  268. package/core/dev/pipeline/archived/TASK_042_path_lock_manager.yaml +0 -53
  269. package/core/dev/pipeline/archived/TASK_043_process_manager.yaml +0 -57
  270. package/core/dev/pipeline/archived/TASK_044_git_integration.yaml +0 -85
  271. package/core/dev/pipeline/archived/TASK_045_task_queue_manager.yaml +0 -54
  272. package/core/dev/pipeline/archived/TASK_046_scheduler_dispatcher.yaml +0 -60
  273. package/core/dev/pipeline/archived/TASK_047_tauri_scheduler_commands.yaml +0 -55
  274. package/core/dev/pipeline/archived/TASK_048_realtime_status_push.yaml +0 -92
  275. package/core/dev/pipeline/archived/TASK_049_frontend_scheduler_integration.yaml +0 -58
  276. package/core/dev/pipeline/archived/TASK_050_error_recovery.yaml +0 -56
  277. package/core/dev/pipeline/archived/TASK_051_optimization_proposals_backend.yaml +0 -53
  278. package/core/dev/pipeline/archived/TASK_052_optimization_proposals_ui.yaml +0 -58
  279. package/core/dev/pipeline/archived/TASK_053_optimization_proposals_diff_view.yaml +0 -54
  280. package/core/dev/pipeline/archived/TASK_054_multi_project_scheduler_state.yaml +0 -76
  281. package/core/dev/pipeline/archived/TASK_055_scheduler_api_project_scope.yaml +0 -64
  282. package/core/dev/pipeline/archived/TASK_056_frontend_scheduler_project_scope.yaml +0 -62
  283. package/core/dev/pipeline/archived/TASK_057_scheduler_module_structure.yaml +0 -54
  284. package/core/dev/pipeline/archived/TASK_058_scheduler_models_extract.yaml +0 -51
  285. package/core/dev/pipeline/archived/TASK_059_scheduler_core_extract.yaml +0 -51
  286. package/core/dev/pipeline/archived/TASK_060_scheduler_commands_extract.yaml +0 -51
  287. package/core/dev/pipeline/archived/TASK_061_scheduler_specialized_commands.yaml +0 -53
  288. package/core/dev/pipeline/archived/TASK_062_process_manager_module_structure.yaml +0 -56
  289. package/core/dev/pipeline/archived/TASK_063_process_manager_core_extract.yaml +0 -56
  290. package/core/dev/pipeline/archived/TASK_064_recovery_module_structure.yaml +0 -57
  291. package/core/dev/pipeline/archived/TASK_065_recovery_core_extract.yaml +0 -56
  292. package/core/dev/pipeline/archived/TASK_066_self_enhancement_scheduler_models.yaml +0 -60
  293. package/core/dev/pipeline/archived/TASK_067_agents_section_quick_actions.yaml +0 -53
  294. package/core/dev/pipeline/archived/TASK_067_self_enhancement_scheduler_core.yaml +0 -65
  295. package/core/dev/pipeline/archived/TASK_068_agent_workflow_rule_enhancement.yaml +0 -46
  296. package/core/dev/pipeline/archived/TASK_068_self_enhancement_tauri_commands.yaml +0 -61
  297. package/core/dev/pipeline/archived/TASK_069_agent_wizard_responsive.yaml +0 -46
  298. package/core/dev/pipeline/archived/TASK_069_self_enhancement_ui.yaml +0 -62
  299. package/core/dev/pipeline/archived/TASK_070_preview_panel_redesign.yaml +0 -62
  300. package/core/dev/pipeline/archived/TASK_070_self_enhancement_integration.yaml +0 -57
  301. package/core/dev/pipeline/archived/TASK_071_preview_panel_qa.yaml +0 -98
  302. package/core/dev/pipeline/archived/TASK_071_single_agent_config.yaml +0 -57
  303. package/core/dev/pipeline/archived/TASK_072_preview_modal_esc_fix.yaml +0 -71
  304. package/core/dev/pipeline/archived/TASK_072_product_review_module.yaml +0 -57
  305. package/core/dev/pipeline/archived/TASK_073_agents_page_component_refactor.yaml +0 -68
  306. package/core/dev/pipeline/archived/TASK_073_rename_single_agent.yaml +0 -64
  307. package/core/dev/pipeline/archived/TASK_074_preview_mode_ui_diagnosis.yaml +0 -71
  308. package/core/dev/pipeline/archived/TASK_074_single_agent_ui_toggle.yaml +0 -56
  309. package/core/dev/pipeline/archived/TASK_075_agents_page_component_refactor.yaml +0 -69
  310. package/core/dev/pipeline/archived/TASK_075_single_agent_integration_test.yaml +0 -75
  311. package/core/dev/pipeline/archived/TASK_076_preview_mode_ui_diagnosis.yaml +0 -70
  312. package/core/dev/pipeline/archived/TASK_076_single_agent_continuous_mode.yaml +0 -65
  313. package/core/dev/pipeline/archived/TASK_077_failure_directory_structure.yaml +0 -51
  314. package/core/dev/pipeline/archived/TASK_077_single_agent_typescript_types.yaml +0 -59
  315. package/core/dev/pipeline/archived/TASK_078_fail_001_agent_no_output.yaml +0 -53
  316. package/core/dev/pipeline/archived/TASK_078_single_agent_ui_simplify.yaml +0 -74
  317. package/core/dev/pipeline/archived/TASK_079_dashboard_rwd_responsive.yaml +0 -63
  318. package/core/dev/pipeline/archived/TASK_079_fail_002_json_bom.yaml +0 -56
  319. package/core/dev/pipeline/archived/TASK_080_fail_003_queue_pollution.yaml +0 -56
  320. package/core/dev/pipeline/archived/TASK_080_http_server_module.yaml +0 -55
  321. package/core/dev/pipeline/archived/TASK_081_failure_logging_tools.yaml +0 -57
  322. package/core/dev/pipeline/archived/TASK_081_http_api_routes.yaml +0 -62
  323. package/core/dev/pipeline/archived/TASK_082_frontend_api_adapter.yaml +0 -51
  324. package/core/dev/pipeline/archived/TASK_082_integrate_failure_to_workflow.yaml +0 -60
  325. package/core/dev/pipeline/archived/TASK_083_cleanup_nextjs_api.yaml +0 -48
  326. package/core/dev/pipeline/archived/TASK_083_task_queue_cleanup.yaml +0 -67
  327. package/core/dev/pipeline/archived/TASK_084_rust_dead_code_cleanup.yaml +0 -66
  328. package/core/dev/pipeline/archived/TASK_084_scheduler_sync_logic_fix.yaml +0 -68
  329. package/core/dev/pipeline/archived/TASK_085_http_api_web_mode_fixes.yaml +0 -46
  330. package/core/dev/pipeline/archived/TASK_085_memory_consolidation_0204_0205.yaml +0 -98
  331. package/core/dev/pipeline/archived/TASK_086_collapsible_preview_panel.yaml +0 -161
  332. package/core/dev/pipeline/archived/TASK_086_web_mode_feature_parity.yaml +0 -62
  333. package/core/dev/pipeline/archived/TASK_087_manual_memory_archival.yaml +0 -163
  334. package/core/dev/pipeline/archived/TASK_087_mobile_http_control.yaml +0 -68
  335. package/core/dev/pipeline/archived/TASK_088_fail_003_to_ppl_002_rule.yaml +0 -63
  336. package/core/dev/pipeline/archived/TASK_088_mobile_http_qa.yaml +0 -121
  337. package/core/dev/pipeline/archived/TASK_089_agent_collaboration_topic.yaml +0 -60
  338. package/core/dev/pipeline/archived/TASK_089_web_mode_monitor_fix.yaml +0 -58
  339. package/core/dev/pipeline/archived/TASK_090_cli_detection_fix.yaml +0 -61
  340. package/core/dev/pipeline/archived/TASK_090_ui_ux_lessons_topic.yaml +0 -63
  341. package/core/dev/pipeline/archived/TASK_091_expandable_card_design.yaml +0 -56
  342. package/core/dev/pipeline/archived/TASK_091_move_agent_section_components.yaml +0 -65
  343. package/core/dev/pipeline/archived/TASK_092_expandable_card_component.yaml +0 -60
  344. package/core/dev/pipeline/archived/TASK_092_refactor_agent_create_wizard.yaml +0 -84
  345. package/core/dev/pipeline/archived/TASK_093_taskcard_detail_integration.yaml +0 -57
  346. package/core/dev/pipeline/archived/TASK_093_update_barrel_exports_test.yaml +0 -84
  347. package/core/dev/pipeline/archived/TASK_094_ai_agent_generation_enhancement.yaml +0 -115
  348. package/core/dev/pipeline/archived/TASK_094_proposalcard_detail_integration.yaml +0 -55
  349. package/core/dev/pipeline/archived/TASK_095_preview_fixes.yaml +0 -129
  350. package/core/dev/pipeline/archived/TASK_095_single_agent_task_selector.yaml +0 -60
  351. package/core/dev/pipeline/archived/TASK_096_agents_page_ux_improvements.yaml +0 -163
  352. package/core/dev/pipeline/archived/TASK_096_single_agent_status_sync.yaml +0 -60
  353. package/core/dev/pipeline/archived/TASK_097_local_claude_error_logging.yaml +0 -59
  354. package/core/dev/pipeline/archived/TASK_097_single_agent_monitor_events.yaml +0 -59
  355. package/core/dev/pipeline/archived/TASK_098_product_manager_team_phase2.yaml +0 -60
  356. package/core/dev/pipeline/archived/TASK_098_single_agent_refactor_test.yaml +0 -58
  357. package/core/dev/pipeline/archived/TASK_099_backend_team_creation.yaml +0 -258
  358. package/core/dev/pipeline/archived/TASK_100_frontend_team_creation.yaml +0 -61
  359. package/core/dev/pipeline/archived/TASK_101_orchestrator_system.yaml +0 -403
  360. package/core/dev/pipeline/archived/TASK_102_designer_sre_teams.yaml +0 -90
  361. package/core/dev/pipeline/archived/TASK_103_integration_testing.yaml +0 -86
  362. package/core/dev/pipeline/archived/TASK_128_integration_testing.yaml +0 -83
  363. package/core/dev/pipeline/archived/TASK_134_cortex_v2_phase3_file_watcher.yaml +0 -65
  364. package/core/dev/pipeline/archived/TASK_134_team_http_api.yaml +0 -96
  365. package/core/dev/pipeline/archived/TASK_135_cortex_v2_phase3_git_monitor.yaml +0 -63
  366. package/core/dev/pipeline/archived/TASK_136_cortex_v2_phase3_change_analyzer.yaml +0 -69
  367. package/core/dev/pipeline/archived/TASK_137_cortex_v2_phase3_cache_invalidator.yaml +0 -67
  368. package/core/dev/pipeline/archived/TASK_137_team_orchestrator_integration.yaml +0 -93
  369. package/core/dev/pipeline/archived/TASK_138_cortex_v2_phase3_distributed_cache.yaml +0 -68
  370. package/core/dev/pipeline/archived/TASK_138_matrix_folder_structure.yaml +0 -61
  371. package/core/dev/pipeline/archived/TASK_139_cortex_v2_phase3_cache_prewarming.yaml +0 -65
  372. package/core/dev/pipeline/archived/TASK_146_unified_documentation.yaml +0 -141
  373. package/core/dev/pipeline/archived/TASK_147_pipeline_execution_rules.yaml +0 -76
  374. package/core/dev/pipeline/archived/TASK_148_update_claude_md.yaml +0 -77
  375. package/core/dev/pipeline/archived/TASK_149_fix_nextjs_mdx_serialization.yaml +0 -63
  376. package/core/dev/pipeline/archived/TASK_149_update_team_docs.yaml +0 -77
  377. package/core/dev/pipeline/archived/TASK_150_pipeline_workflow_guide.yaml +0 -82
  378. package/core/dev/pipeline/archived/TASK_164_fix_smart_context_switch.yaml +0 -49
  379. package/core/dev/pipeline/archived/TASK_165_ctags_symbol_index.yaml +0 -53
  380. package/core/dev/pipeline/archived/TASK_166_symbol_search_mcp_tool.yaml +0 -48
  381. package/core/dev/pipeline/archived/TASK_167_llm_module_summary.yaml +0 -55
  382. package/core/dev/pipeline/archived/TASK_168_map_reduce_context.yaml +0 -51
  383. package/core/dev/pipeline/archived/TASK_169_v2_integration_testing.yaml +0 -52
  384. package/core/dev/pipeline/backups/archive_2026-02-04T22-07-22/TASK_QUEUE_backup.json +0 -95
  385. package/core/dev/pipeline/docs/multi-agent-coordination.md +0 -446
  386. package/core/dev/pipeline/docs/overview.md +0 -406
  387. package/core/dev/pipeline/docs/task-management.md +0 -412
  388. package/core/dev/pipeline/docs/workflows.md +0 -32
  389. package/core/dev/pipeline/orchestrator/schemas/task_queue_schema.json +0 -58
  390. package/core/dev/pipeline/orchestrator/schemas/task_schema.json +0 -139
  391. package/core/dev/pipeline/plans/PLAN_task_cli_refactor.md +0 -281
  392. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +0 -27
  393. package/core/dev/plans/ANSUZ_SLIM_PLAN.md +0 -68
  394. package/core/dev/plans/CLI_FIRST_INSTALL_FLOW.md +0 -120
  395. package/core/dev/plans/FORMATION_RETIREMENT_PLAN.md +0 -313
  396. package/core/dev/plans/KUZU_REPLACEMENT_PLAN.md +0 -126
  397. package/core/dev/scripts/CRASH_DIAGNOSIS.md +0 -47
  398. package/core/dev/scripts/README.md +0 -142
  399. package/core/dev/scripts/RUN_ONCE.bat +0 -40
  400. package/core/dev/scripts/START_DEV_AGENT.bat +0 -63
  401. package/core/dev/scripts/START_MULTI_AGENT.bat +0 -80
  402. package/core/dev/scripts/dev_agent_scheduler.ps1 +0 -536
  403. package/core/dev/scripts/init_git.ps1 +0 -396
  404. package/core/dev/scripts/init_git.sh +0 -337
  405. package/core/dev/scripts/init_project.ps1 +0 -851
  406. package/core/dev/scripts/init_project.sh +0 -477
  407. package/core/dev/scripts/multi_agent_scheduler.ps1 +0 -2021
  408. package/core/dev/scripts/multi_agent_scheduler.sh +0 -1344
  409. package/core/dev/scripts/run_once.sh +0 -47
  410. package/core/dev/scripts/setup_rag.ps1 +0 -304
  411. package/core/dev/scripts/setup_rag.sh +0 -230
  412. package/core/dev/scripts/start_dev_agent.sh +0 -137
  413. package/core/dev/scripts/start_multi_agent.sh +0 -41
  414. package/core/dev/scripts/sync_task_queue.ps1 +0 -505
  415. package/core/dev/scripts/sync_task_queue.sh +0 -392
  416. package/core/dev/specs/agent-connect/PROTOCOL.md +0 -177
  417. package/core/dev/specs/agent-connect/SDK_GUIDE.md +0 -915
  418. package/core/dev/specs/agent-connect/examples/minimal-site/README.md +0 -137
  419. package/core/dev/specs/agent-connect/examples/minimal-site/package.json +0 -12
  420. package/core/dev/specs/agent-connect/examples/minimal-site/public/index.html +0 -116
  421. package/core/dev/specs/agent-connect/examples/minimal-site/public/install-redirect.js +0 -73
  422. package/core/dev/specs/agent-connect/examples/minimal-site/server.js +0 -516
  423. package/core/dev/specs/agent-connect/examples/minimal-site/test/smoke.test.mjs +0 -263
  424. 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
  425. package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-prompt-mojibake.md +0 -90
  426. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-07.md +0 -61
  427. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-08_relay-v1-conformance.md +0 -76
  428. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-09_v0.4-session-channel.md +0 -87
  429. package/core/dev/specs/agent-connect/history/FLOWPIX_REPLY_agent-hub_2026-09-08_relay-v1-answers.md +0 -68
  430. package/core/dev/specs/agent-connect/history/FLOWPIX_bridge_CONTRACT.md +0 -642
  431. package/core/dev/specs/agent-connect/history/FLOWPIX_spikes_relay_spike_relay.mjs +0 -244
  432. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-07.md +0 -77
  433. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_direction-change-v0.3.md +0 -44
  434. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-answers-ack.md +0 -37
  435. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-conformance.md +0 -56
  436. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_annotations-install-coldstart.md +0 -44
  437. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_empty-prompt-first-turn.md +0 -56
  438. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_prompt-mojibake-fixed.md +0 -48
  439. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_session-channel.md +0 -57
  440. package/core/dev/specs/agent-connect/history/PROTOCOL_v0.3_snapshot.md +0 -379
  441. package/core/dev/specs/agent-connect/history/README.md +0 -47
  442. package/core/dev/specs/peer/CODEX_INTERACTIVE_PUSH.md +0 -65
  443. package/core/dev/specs/peer/CODEX_MANAGED_DAEMON.md +0 -54
  444. package/core/dev/specs/peer/CODEX_PEER_PULL_SPIKE.md +0 -54
  445. package/core/dev/specs/peer/MODS_SPIKE.md +0 -133
  446. package/core/dev/specs/peer/PER_PROJECT_ADDRESSING.md +0 -143
  447. package/core/dev/specs/peer/SWARM_PROTOCOLS.md +0 -256
  448. package/core/dev/specs/peer/codex-hook-shim-peer.test.js +0 -113
  449. package/core/dev/specs/peer/codex-push-launcher.test.js +0 -142
  450. package/core/dev/specs/peer/setup-codex-hooks.test.js +0 -60
  451. package/core/dev/specs/peer-ansuz/DELIVERY_SPIKE.md +0 -397
  452. package/core/dev/specs/peer-ansuz/DESIGN.md +0 -109
  453. package/core/dev/specs/peer-ansuz/spike/claude_poke.js +0 -129
  454. package/core/dev/specs/peer-ansuz/spike/claude_session_start_hook.js +0 -37
  455. package/core/dev/specs/peer-ansuz/spike/claude_settings_hook.json +0 -14
  456. package/core/dev/specs/peer-ansuz/spike/codex_appserver_client.js +0 -105
  457. package/core/dev/specs/peer-ansuz/spike/codex_appserver_query.js +0 -29
  458. package/core/dev/specs/peer-ansuz/spike/extract_timeline.js +0 -26
  459. package/core/dev/specs/synapse/SYMBOL_IDENTITY.md +0 -305
  460. package/core/dev/spikes/A4-cypher-varlen.md +0 -176
  461. package/core/dev/spikes/bloat-rounds.sh +0 -25
  462. package/core/dev/spikes/mods/clean-claude.js +0 -9
  463. package/core/dev/spikes/mods/drive-probe.js +0 -29
  464. package/core/dev/spikes/mods/e2e-peer.js +0 -71
  465. package/core/dev/spikes/mods/evidence/e2e-peer-control.json +0 -17
  466. package/core/dev/spikes/mods/evidence/e2e-peer-mod.json +0 -17
  467. package/core/dev/spikes/mods/evidence/probe-006a6e65-d807-4bc1-b648-fd7d1edfe0b4.jsonl +0 -4
  468. package/core/dev/spikes/mods/evidence/probe-cebdf1f7-f9c4-47a8-83cd-7c0786177404.jsonl +0 -12
  469. package/core/dev/spikes/mods/evidence/probe-eb21147d-10ce-4c32-93ed-37ca37d88d5a.jsonl +0 -11
  470. package/core/dev/spikes/mods/evidence/stream-cebdf1f7.jsonl +0 -18
  471. package/core/dev/spikes/mods/kenaz-mod-probe/.claude-plugin/plugin.json +0 -1
  472. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/hooks.json +0 -1
  473. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/register.ts +0 -65
  474. package/core/dev/spikes/mods/kenaz-mod-probe/tsconfig.json +0 -3
@@ -1,274 +0,0 @@
1
- # 文件鎖模式(並發寫入保護)
2
-
3
- **ID**: K-PAT-005
4
- **分類**: 通用技術模式
5
- **重要性**: ⭐⭐⭐⭐
6
- **標籤**: `concurrency`, `file-lock`, `async-await`, `nodejs`, `windows`
7
-
8
- ---
9
-
10
- ## 問題描述
11
-
12
- 多個進程並發寫入同一文件時,會發生競爭條件(Race Condition),導致:
13
- - 數據損壞(部分寫入)
14
- - 數據丟失(覆蓋寫入)
15
- - 不一致狀態(讀取-修改-寫入衝突)
16
-
17
- ---
18
-
19
- ## 解決方案:文件鎖模式
20
-
21
- ### 核心概念
22
- 使用鎖文件(Lock File)確保同一時間只有一個進程可以修改目標文件。
23
-
24
- ### 實現架構
25
- ```
26
- 進程 A 進程 B
27
- ↓ ↓
28
- 嘗試獲取鎖 嘗試獲取鎖
29
- ↓ ↓
30
- ✅ 成功(創建 .lock) ❌ 失敗(.lock 已存在)
31
- ↓ ↓
32
- 讀取文件 等待重試(非阻塞)
33
- ↓ ↓
34
- 修改數據 等待重試
35
- ↓ ↓
36
- 寫入文件 等待重試
37
- ↓ ↓
38
- 釋放鎖(刪除 .lock) ✅ 成功(A 已釋放)
39
- ↓
40
- 讀取、修改、寫入
41
- ↓
42
- 釋放鎖
43
- ```
44
-
45
- ---
46
-
47
- ## 實現細節(Node.js)
48
-
49
- ### 1. 嘗試獲取鎖(原子操作)
50
- ```javascript
51
- function tryAcquireLock(lockFile) {
52
- try {
53
- // 檢查鎖是否存在
54
- if (fs.existsSync(lockFile)) {
55
- const lockStat = fs.statSync(lockFile);
56
- const lockAge = Date.now() - lockStat.mtimeMs;
57
-
58
- // 陳舊鎖清理(防止死鎖)
59
- if (lockAge > 10000) { // 10 秒超時
60
- console.log('⚠️ 檢測到陳舊鎖,強制釋放');
61
- fs.unlinkSync(lockFile);
62
- } else {
63
- return false; // 鎖被佔用
64
- }
65
- }
66
-
67
- // 原子創建鎖文件
68
- const lockData = {
69
- pid: process.pid,
70
- timestamp: new Date().toISOString()
71
- };
72
- fs.writeFileSync(lockFile, JSON.stringify(lockData, null, 2), {
73
- flag: 'wx' // 排他性創建(文件存在則失敗)
74
- });
75
- return true;
76
- } catch (error) {
77
- if (error.code === 'EEXIST') {
78
- return false; // 其他進程剛好建立了鎖
79
- }
80
- throw error;
81
- }
82
- }
83
- ```
84
-
85
- ### 2. 非阻塞重試機制
86
- ```javascript
87
- async function acquireLock(lockFile, maxRetries = 50, retryDelay = 100) {
88
- let retries = 0;
89
-
90
- while (retries < maxRetries) {
91
- if (tryAcquireLock(lockFile)) {
92
- return true;
93
- }
94
-
95
- // 使用 setTimeout(非阻塞)
96
- await new Promise(resolve => setTimeout(resolve, retryDelay));
97
- retries++;
98
- }
99
-
100
- console.log('❌ 無法獲取鎖,超過最大重試次數');
101
- return false;
102
- }
103
- ```
104
-
105
- ### 3. 安全的文件更新流程
106
- ```javascript
107
- async function updateFile(filePath, updateFn) {
108
- const lockFile = filePath + '.lock';
109
-
110
- // 獲取鎖(防止並發寫入)
111
- const acquired = await acquireLock(lockFile);
112
- if (!acquired) {
113
- throw new Error('無法獲取文件鎖');
114
- }
115
-
116
- try {
117
- // 讀取現有數據
118
- let data = {};
119
- if (fs.existsSync(filePath)) {
120
- data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
121
- }
122
-
123
- // 應用更新函數
124
- const newData = updateFn(data);
125
-
126
- // 寫入文件
127
- fs.writeFileSync(filePath, JSON.stringify(newData, null, 2));
128
-
129
- } finally {
130
- // 確保總是釋放鎖(即使發生錯誤)
131
- releaseLock(lockFile);
132
- }
133
- }
134
- ```
135
-
136
- ### 4. 釋放鎖
137
- ```javascript
138
- function releaseLock(lockFile) {
139
- try {
140
- if (fs.existsSync(lockFile)) {
141
- fs.unlinkSync(lockFile);
142
- }
143
- } catch (err) {
144
- console.warn('⚠️ 釋放鎖失敗:', err.message);
145
- }
146
- }
147
- ```
148
-
149
- ---
150
-
151
- ## 關鍵特性
152
-
153
- ### ✅ 原子操作
154
- - 使用 `flag: 'wx'`(排他性創建)
155
- - 確保鎖文件創建的原子性
156
-
157
- ### ✅ 非阻塞等待
158
- - 使用 `async/await + setTimeout`
159
- - 不佔用 CPU,避免忙等待(busy-wait)
160
-
161
- ### ✅ 陳舊鎖清理
162
- - 10 秒超時自動釋放
163
- - 防止進程崩潰導致死鎖
164
-
165
- ### ✅ 確保鎖釋放
166
- - 使用 `finally` 塊
167
- - 即使發生錯誤也能釋放鎖
168
-
169
- ---
170
-
171
- ## 適用場景
172
-
173
- ### ✅ 適用
174
- - 多進程並發寫入同一文件(如 state.json, config.json)
175
- - 需要讀取-修改-寫入的原子操作
176
- - 短時間的文件操作(幾秒內完成)
177
-
178
- ### ❌ 不適用
179
- - 跨機器的分佈式鎖(需要使用 Redis、ZooKeeper)
180
- - 長時間持有鎖的場景(> 10 秒)
181
- - 高頻並發(毫秒級,建議使用數據庫)
182
-
183
- ---
184
-
185
- ## 注意事項
186
-
187
- ### 1. Windows 文件系統限制
188
- 在極短時間內(< 5ms),`flag: 'wx'` 的原子性不完全可靠。
189
-
190
- **解決方案**:配合啟動間隔(1-3 秒)使用。
191
- **參考**:`K-SOL-003` Windows 文件系統競爭條件解決方案
192
-
193
- ### 2. 重試次數與延遲設置
194
- ```javascript
195
- maxRetries = 50 // 最多重試 50 次
196
- retryDelay = 100 // 每次間隔 100ms
197
- // 總等待時間 = 50 * 100ms = 5 秒
198
- ```
199
-
200
- 根據任務執行時間調整參數。
201
-
202
- ### 3. 錯誤處理
203
- - 超過重試次數時應該返回錯誤,而不是靜默失敗
204
- - 記錄鎖衝突日誌,便於調試
205
-
206
- ---
207
-
208
- ## 實際應用
209
-
210
- ### .team 系統狀態管理
211
- ```javascript
212
- async function updateTeamState(teamId, status, extraData = {}) {
213
- const stateFile = path.join('.team', teamId, 'state.json');
214
- const lockFile = stateFile + '.lock';
215
-
216
- const acquired = await acquireLock(lockFile);
217
- if (!acquired) {
218
- console.log('❌ 無法獲取鎖,放棄更新狀態');
219
- return;
220
- }
221
-
222
- try {
223
- let existingState = {};
224
- if (fs.existsSync(stateFile)) {
225
- existingState = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
226
- }
227
-
228
- const state = {
229
- ...existingState,
230
- teamId,
231
- status,
232
- updatedAt: new Date().toISOString(),
233
- ...extraData
234
- };
235
-
236
- fs.writeFileSync(stateFile, JSON.stringify(state, null, 2));
237
- } finally {
238
- releaseLock(lockFile);
239
- }
240
- }
241
- ```
242
-
243
- ---
244
-
245
- ## 測試驗證
246
-
247
- ### 測試場景
248
- 5 個 worker 進程並發更新同一文件,每個進程添加一條記錄。
249
-
250
- ### 預期結果
251
- - ✅ 所有 5 條記錄都正確保存
252
- - ✅ 無數據損壞或丟失
253
- - ✅ 每個進程按順序執行(通過鎖機制)
254
-
255
- ### 實際測試
256
- ```bash
257
- node test-file-lock.js
258
- # 結果:5 個更新全部成功保存,無競爭條件
259
- ```
260
-
261
- ---
262
-
263
- ## 相關記憶
264
-
265
- - `K-SOL-003`: Windows 文件系統競爭條件解決方案
266
- - `KZ-TEAM-004`: .team 並行處理能力
267
- - `K-PAT-002`: Leader-Worker 協作模式
268
-
269
- ---
270
-
271
- **建立日期**: 2026-02-11
272
- **來源**: .team 並行處理實現
273
- **重要性**: 4/5
274
- **適用範圍**: 所有需要並發文件操作的 Node.js 應用
@@ -1,28 +0,0 @@
1
- # PPL Rules Reference - Pipeline 規則快速參考
2
-
3
- **記憶 ID**: knowledge/references/001
4
- **類型**: Quick Reference
5
- **標籤**: #pipeline #rules #reference
6
- **建立時間**: 2026-02-10
7
-
8
- ---
9
-
10
- ## 關鍵 Pipeline 規則
11
-
12
- | 規則 ID | 說明 |
13
- |--------|------|
14
- | PPL-101 | 任務拆分粒度(15-20 分鐘) |
15
- | PPL-102 | 任務依賴分析 |
16
- | PPL-104 | Team 優先原則 |
17
- | PPL-105 | agent_type 命名規範 |
18
- | PPL-106 | Feature ID 自動分配 |
19
- | PPL-107 | 工作啟動前展示計劃(必須) |
20
- | PPL-108 | 失敗處理流程 |
21
- | PPL-109 | Commit 策略 |
22
- | PPL-110 | 監控與自動化 |
23
- | PPL-111 | scope_paths 衝突檢測 |
24
- | PPL-112 | 驗收標準驗證 |
25
-
26
- ## 完整文檔
27
-
28
- `.rule/pipeline/task-execution.yaml`
@@ -1,137 +0,0 @@
1
- # JSON BOM 編碼問題
2
-
3
- **ID**: KNZ-SOLUTION-001
4
- **分類**: solutions
5
- **標籤**: #json #encoding #windows #troubleshooting
6
-
7
- ## 問題描述
8
-
9
- Windows 環境下編輯 JSON 文件時,可能會自動添加 UTF-8 BOM(Byte Order Mark),導致 JSON 解析失敗。
10
-
11
- ## 症狀
12
-
13
- ```javascript
14
- // 錯誤訊息
15
- SyntaxError: Unexpected token in JSON at position 0
16
-
17
- // 文件看起來正常,但無法解析
18
- {
19
- "key": "value"
20
- }
21
- ```
22
-
23
- ## 根本原因
24
-
25
- Windows 編輯器(如 Notepad)預設使用 UTF-8 with BOM:
26
- - BOM 是不可見字符(`\uFEFF`)
27
- - 位於文件開頭
28
- - JSON 規範不允許 BOM
29
- - Node.js `JSON.parse()` 無法處理
30
-
31
- ## 解決方案
32
-
33
- ### 方案 1:使用自動修復工具(推薦)
34
-
35
- ```bash
36
- # 一鍵修復(移除 BOM + 驗證 + 格式化)
37
- node .failure/tools/fix_json.js dev/pipeline/TASK_QUEUE.json
38
- ```
39
-
40
- **功能**:
41
- - ✅ 自動移除 BOM
42
- - ✅ 驗證 JSON 語法
43
- - ✅ 格式化 JSON(2 空格縮進)
44
- - ✅ 備份原文件
45
-
46
- ### 方案 2:手動移除 BOM
47
-
48
- ```bash
49
- # 僅移除 BOM
50
- node .failure/tools/remove_bom.js dev/pipeline/TASK_QUEUE.json
51
- ```
52
-
53
- ### 方案 3:批量檢查
54
-
55
- ```bash
56
- # 檢查所有 JSON 文件是否有 BOM
57
- node .failure/tools/check_bom.js
58
- ```
59
-
60
- ## 預防措施
61
-
62
- ### 1. 使用正確的編輯器
63
- 推薦使用:
64
- - VS Code(預設 UTF-8 without BOM)
65
- - Notepad++(可設置 UTF-8 without BOM)
66
- - Sublime Text
67
-
68
- 避免使用:
69
- - Windows Notepad(預設 UTF-8 with BOM)
70
-
71
- ### 2. 編輯後立即驗證
72
-
73
- ```bash
74
- # 驗證 JSON 語法
75
- node .failure/tools/validate_json.js file.json
76
-
77
- # 或使用 Node.js 快速驗證
78
- node -e "JSON.parse(require('fs').readFileSync('file.json', 'utf8'))"
79
- ```
80
-
81
- ### 3. Git 配置
82
-
83
- 在 `.gitattributes` 中設置:
84
- ```
85
- *.json text eol=lf
86
- ```
87
-
88
- 確保所有 JSON 文件使用 LF 換行符,避免 BOM 問題。
89
-
90
- ## 檢測方法
91
-
92
- ### 方法 1:使用工具
93
- ```bash
94
- node .failure/tools/check_bom.js file.json
95
- ```
96
-
97
- ### 方法 2:手動檢查
98
- ```bash
99
- # Windows PowerShell
100
- Get-Content file.json -Encoding Byte -TotalCount 3
101
-
102
- # 如果輸出是 239 187 191,則有 BOM(EF BB BF)
103
- ```
104
-
105
- ### 方法 3:Node.js 檢測
106
- ```javascript
107
- const fs = require('fs');
108
- const buffer = fs.readFileSync('file.json');
109
- const hasBOM = buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF;
110
- console.log('Has BOM:', hasBOM);
111
- ```
112
-
113
- ## 相關失敗記錄
114
-
115
- 參考 `.failure/data-integrity/FAIL-002_json_bom_encoding.md`
116
-
117
- ## 工具清單
118
-
119
- | 工具 | 用途 | 使用時機 |
120
- |------|------|---------|
121
- | `fix_json.js` | 一鍵修復 | 編輯 JSON 後(推薦) |
122
- | `validate_json.js` | 驗證語法 | 編輯 JSON 後 |
123
- | `remove_bom.js` | 移除 BOM | BOM 錯誤時 |
124
- | `check_bom.js` | 批量檢查 | 定期維護 |
125
-
126
- ## 最佳實踐
127
-
128
- 1. ✅ 編輯 JSON 後立即驗證
129
- 2. ✅ 使用自動修復工具
130
- 3. ✅ 配置編輯器為 UTF-8 without BOM
131
- 4. ✅ 定期批量檢查
132
- 5. ✅ 遵循 `.gitattributes` 規範
133
-
134
- ## 參考資料
135
-
136
- - `.failure/tools/README.md` - 工具使用指南
137
- - `.failure/data-integrity/FAIL-002_json_bom_encoding.md` - 失敗記錄
@@ -1,239 +0,0 @@
1
- # Windows 文件系統競爭條件解決方案
2
-
3
- **ID**: K-SOL-003
4
- **分類**: 問題解決方案
5
- **重要性**: ⭐⭐⭐⭐
6
- **標籤**: `windows`, `race-condition`, `file-system`, `concurrency`, `nodejs`
7
-
8
- ---
9
-
10
- ## 問題描述
11
-
12
- ### 現象
13
- 在 Windows 環境下,多個進程在極短時間內(< 5ms)並發創建/寫入文件時,即使使用原子操作(如 `fs.writeFileSync(..., { flag: 'wx' })`),仍然會發生競爭條件。
14
-
15
- ### 實際案例
16
- ```javascript
17
- // 進程 A 和進程 B 同時執行(間隔 < 5ms)
18
- // 兩者都成功創建了鎖文件!
19
- tryAcquireLock('state.json.lock'); // A: true
20
- tryAcquireLock('state.json.lock'); // B: true ❌ 應該失敗但成功了
21
- ```
22
-
23
- ### 根本原因
24
- Windows 文件系統的原子操作在極短時間窗口內不完全可靠:
25
- - NTFS 文件系統的元數據更新存在延遲
26
- - `CreateFile` API 在極短時間內可能返回不一致結果
27
- - 反病毒軟件可能干擾文件操作的原子性
28
-
29
- ---
30
-
31
- ## 解決方案:文件鎖 + 啟動間隔
32
-
33
- ### 核心策略
34
- **組合方案**,而非單一技術方案:
35
- 1. **文件鎖機制**:防止競爭條件(主要防護)
36
- 2. **啟動間隔**:避開不可靠的時間窗口(輔助防護)
37
-
38
- ### 為什麼需要啟動間隔?
39
- 雖然文件鎖已經提供保護,但在 Windows 極短時間窗口內,原子操作可能失效。啟動間隔確保進程不會在這個窗口內同時啟動。
40
-
41
- ---
42
-
43
- ## 實現方案
44
-
45
- ### 1. 文件鎖機制(參考 K-PAT-005)
46
- ```javascript
47
- async function acquireLock(lockFile, maxRetries = 50, retryDelay = 100) {
48
- let retries = 0;
49
- while (retries < maxRetries) {
50
- if (tryAcquireLock(lockFile)) {
51
- return true;
52
- }
53
- await new Promise(resolve => setTimeout(resolve, retryDelay));
54
- retries++;
55
- }
56
- return false;
57
- }
58
-
59
- function tryAcquireLock(lockFile) {
60
- try {
61
- // 陳舊鎖清理
62
- if (fs.existsSync(lockFile)) {
63
- const lockAge = Date.now() - fs.statSync(lockFile).mtimeMs;
64
- if (lockAge > 10000) { // 10 秒超時
65
- fs.unlinkSync(lockFile);
66
- } else {
67
- return false;
68
- }
69
- }
70
-
71
- // 原子創建
72
- fs.writeFileSync(lockFile, JSON.stringify({
73
- pid: process.pid,
74
- timestamp: new Date().toISOString()
75
- }), { flag: 'wx' });
76
-
77
- return true;
78
- } catch (error) {
79
- if (error.code === 'EEXIST') return false;
80
- throw error;
81
- }
82
- }
83
- ```
84
-
85
- ### 2. 啟動間隔策略
86
- ```javascript
87
- // ❌ 錯誤:極短時間啟動
88
- for (let i = 0; i < 5; i++) {
89
- spawn('node', ['worker.js']); // 間隔 < 1ms
90
- }
91
-
92
- // ✅ 正確:加入啟動間隔
93
- for (let i = 0; i < 5; i++) {
94
- spawn('node', ['worker.js']);
95
-
96
- if (i < 4) {
97
- await new Promise(resolve => setTimeout(resolve, 2000)); // 2 秒間隔
98
- }
99
- }
100
- ```
101
-
102
- ### 3. 間隔時間選擇
103
-
104
- | 間隔時間 | 適用場景 | 說明 |
105
- |---------|---------|------|
106
- | < 100ms | ❌ 不推薦 | Windows 文件系統可能失效 |
107
- | 100-500ms | ⚠️ 謹慎 | 仍有小概率失效 |
108
- | 1-3 秒 | ✅ 推薦 | 完全避開競爭條件窗口 |
109
- | > 5 秒 | ⚠️ 過度 | 沒有必要,浪費時間 |
110
-
111
- **推薦值**:2 秒(實測有效)
112
-
113
- ---
114
-
115
- ## 決策依據
116
-
117
- ### 關鍵洞察
118
- > "那不要極短時間 我們可以 1-3秒 放一個團隊出發 我覺得是沒問題的"
119
- > — 用戶洞察
120
-
121
- ### 為什麼 2 秒間隔可以接受?
122
- 1. **任務執行時間**:團隊任務通常需要幾分鐘
123
- 2. **相對成本**:2 秒 vs 3 分鐘 = 1.1% 時間增加
124
- 3. **可靠性提升**:從可能失敗 → 100% 成功
125
- 4. **實用性原則**:滿足需求即可,不追求極限
126
-
127
- **結論**:實用性 > 技術炫技
128
-
129
- ---
130
-
131
- ## 測試驗證
132
-
133
- ### 測試場景 1:5 Worker 並發(2 秒間隔)
134
- ```bash
135
- node test-file-lock.js
136
- ```
137
-
138
- **結果**:
139
- ```
140
- ✅ 所有 5 個更新都正確保存
141
- - W1: value 100 (0 → 1)
142
- - W2: value 200 (1 → 2)
143
- - W3: value 300 (2 → 3)
144
- - W4: value 400 (3 → 4)
145
- - W5: value 500 (4 → 5)
146
- ```
147
-
148
- ### 測試場景 2:2 Team 並行(2 秒間隔)
149
- ```bash
150
- node test-parallel-teams.js
151
- ```
152
-
153
- **結果**:
154
- ```
155
- ✅ Team 1: 成功(exit code: 0, 62 秒)
156
- ✅ Team 2: 成功(exit code: 0, 123 秒)
157
- ✅ state.json 無競爭條件,數據完整
158
- ```
159
-
160
- ---
161
-
162
- ## 為什麼不使用其他方案?
163
-
164
- ### 方案 A:追求極短時間並發
165
- - ❌ Windows 文件系統不可靠(< 5ms)
166
- - ❌ 需要更複雜的鎖機制(如分佈式鎖)
167
- - ❌ 成本高,收益低(任務本身需要幾分鐘)
168
-
169
- ### 方案 B:使用數據庫或外部服務
170
- - ❌ 違反 GEN-007 規則(專案自包含原則)
171
- - ❌ 增加外部依賴
172
- - ❌ 過度工程(問題不需要這麼複雜的方案)
173
-
174
- ### 方案 C:文件鎖 + 啟動間隔 ✅
175
- - ✅ 簡單有效
176
- - ✅ 完全符合 GEN-007 規則
177
- - ✅ 成本可接受(2 秒 vs 幾分鐘任務)
178
- - ✅ 實測 100% 成功
179
-
180
- ---
181
-
182
- ## 適用場景
183
-
184
- ### ✅ 推薦使用
185
- - Windows 環境的並行處理
186
- - 多進程並發寫入文件
187
- - 任務執行時間 > 30 秒
188
- - 需要保證數據完整性
189
-
190
- ### ❌ 不推薦
191
- - Linux/macOS 環境(原子操作更可靠,可能不需要間隔)
192
- - 實時性要求極高(毫秒級響應)
193
- - 高頻並發(每秒上百次)
194
-
195
- ---
196
-
197
- ## 注意事項
198
-
199
- ### 1. 間隔時間調整
200
- 根據實際任務執行時間調整:
201
- - 任務 < 10 秒:使用 500ms 間隔
202
- - 任務 10-60 秒:使用 1 秒間隔
203
- - 任務 > 60 秒:使用 2-3 秒間隔
204
-
205
- ### 2. 監控與日誌
206
- 記錄鎖衝突情況:
207
- ```javascript
208
- if (!acquired) {
209
- console.log(`❌ 無法獲取鎖: ${lockFile},已重試 ${maxRetries} 次`);
210
- }
211
- ```
212
-
213
- ### 3. 錯誤處理
214
- - 超時應該拋出錯誤而不是靜默失敗
215
- - 記錄競爭條件發生的頻率
216
- - 如果頻繁發生,考慮增加間隔時間
217
-
218
- ---
219
-
220
- ## 相關記憶
221
-
222
- - `K-PAT-005`: 文件鎖模式
223
- - `K-PAT-004`: 用戶領域知識的價值
224
- - `KZ-TEAM-004`: .team 並行處理能力
225
-
226
- ---
227
-
228
- ## 參考資料
229
-
230
- - Windows NTFS 文件系統文檔
231
- - Node.js `fs.writeFileSync` flag 選項
232
- - .team 並行處理測試腳本
233
-
234
- ---
235
-
236
- **建立日期**: 2026-02-11
237
- **來源**: .team 並行處理問題解決
238
- **重要性**: 4/5
239
- **適用範圍**: Windows 環境的 Node.js 並行處理