kenaz 0.3.21 → 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 (481) hide show
  1. package/core/.claude/commands/Ansuz.md +2 -0
  2. package/core/.claude/hooks/__tests__/peer-session-fill.test.js +37 -0
  3. package/core/.claude/hooks/_ansuz-conversation.js +32 -1
  4. package/core/.claude/hooks/_user-scope.js +1 -1
  5. package/core/.claude/hooks/core-resolve.js +1 -1
  6. package/core/.claude/hooks/peer-optin.test.js +74 -0
  7. package/core/.claude/hooks/peer-session-fill.js +38 -0
  8. package/core/.claude/hooks/turn-context.js +5 -4
  9. package/core/.claude/hooks/worktree-create.js +6 -6
  10. package/core/.claude/hooks/worktree-remove.js +4 -4
  11. package/core/.claude/settings.json +9 -0
  12. package/core/.collaboration/core/reconcile.js +16 -1
  13. package/core/.collaboration/core/task-2467-lifecycle.test.js +63 -0
  14. package/core/.collaboration/core/task-api.js +37 -7
  15. package/core/.formation/bifrost/launch.js +1 -1
  16. package/core/.formation/bifrost/openai/codex-hook-shim.js +21 -4
  17. package/core/.formation/bifrost/openai/codex-peer-pull.test.js +42 -0
  18. package/core/.formation/bifrost/provider-launch.js +2 -1
  19. package/core/.formation/tools/kenaz-stats.js +1 -1
  20. package/core/.formation/tools/post-complete/git-merge.js +1 -1
  21. package/core/.formation/tools/prompt.js +1 -1
  22. package/core/.kenaz/specialist/ansuz_rules.yaml +7 -51
  23. package/core/.kenaz/specialist/ansuz_session_handoff.schema.json +2 -6
  24. package/core/.rule/general/project-self-containment.yaml +2 -2
  25. package/core/.specialist/Amelia/README.md +1 -1
  26. package/core/.specialist/Amelia/rule.yaml +1 -1
  27. package/core/.specialist/Ansuz/RULES.md +1 -1
  28. package/core/.specialist/Ansuz/concepts/commitment_layer.yaml +1 -1
  29. package/core/.specialist/Ansuz/concepts/evolvable_guardrails.yaml +1 -1
  30. package/core/.specialist/Ansuz/knowledge.yaml +1 -3
  31. package/core/.specialist/tools/__tests__/task-2409-lessons.test.js +10 -0
  32. package/core/.specialist/tools/__tests__/task-2427-harvest.test.js +25 -0
  33. package/core/.specialist/tools/ansuz-boot-fast.js +1 -1
  34. package/core/.specialist/tools/failure-detector.js +4 -4
  35. package/core/.specialist/tools/handoff-doc.js +1 -1
  36. package/core/.specialist/tools/lessons.js +2 -2
  37. package/core/CLAUDE.md +5 -5
  38. package/core/KENAZ_CORE_VERSION +1 -1
  39. package/core/dashboard/scripts/install-kenaz-cli.js +471 -0
  40. package/core/dev/scripts/check-file-size.js +1 -1
  41. package/core/dev/scripts/ci-feedback.js +1 -1
  42. package/core/dev/scripts/gc-agent-worktrees.js +11 -11
  43. package/core/dev/scripts/kenaz-session.js +3 -3
  44. package/core/dev/scripts/peer-identity-e2e.js +3 -3
  45. package/core/dev/scripts/run-rust-tests.js +2 -2
  46. package/core/dev/scripts/skill-routing-replay.js +3 -3
  47. package/core/dev/scripts/task1961/selftest.js +2 -2
  48. package/core/dev/scripts/windows-hide-guard.test.js +97 -0
  49. package/core/plugins/kenaz/commands/Ansuz.md +2 -0
  50. package/core/plugins/kenaz/guidance.md +2 -0
  51. package/core/plugins/kenaz/hooks/core-resolve.js +1 -1
  52. package/core/plugins/kenaz/hooks/hooks.json +9 -0
  53. package/core/plugins/kenaz/hooks/kenaz-hook.js +53 -4
  54. package/core/plugins/kenaz/scripts/kenaz.test.js +72 -5
  55. package/core/plugins/kenaz/scripts/ygg.js +40 -4
  56. package/core/plugins/kenaz/scripts/ygg.test.js +63 -3
  57. package/core/plugins/kenaz-peer/hooks/register.test.ts +59 -2
  58. package/core/plugins/kenaz-peer/hooks/register.ts +24 -1
  59. package/lib/cli.js +9 -5
  60. package/package.json +6 -6
  61. package/vendor/install-kenaz-cli.js +21 -6
  62. package/core/.kenaz/designs/METAPLASTICITY_CONFIDENCE_DESIGN.md +0 -537
  63. package/core/.kenaz/designs/REFLEX_INITIATOR_DESIGN.md +0 -501
  64. package/core/.kenaz/designs/TASK_1385_handoff_mcp_design.md +0 -426
  65. package/core/.kenaz/designs/TASK_932_hippocampus_consolidation.md +0 -103
  66. package/core/.kenaz/designs/TASK_934_efe_signal_engine.md +0 -97
  67. package/core/.kenaz/designs/TASK_935_self_evolution_framework.md +0 -154
  68. package/core/.kenaz/designs/VISION_cognitive_architecture_roadmap.md +0 -159
  69. package/core/.kenaz/designs/metaplasticity_simulation_results.json +0 -696
  70. package/core/.kenaz/main-memory/README.md +0 -230
  71. package/core/.kenaz/main-memory/kenaz/cortex/001_cortex_overview.md +0 -168
  72. package/core/.kenaz/main-memory/kenaz/cortex/001_rag_engine_overview.md +0 -30
  73. package/core/.kenaz/main-memory/kenaz/memory-system/001_three_tier_architecture.md +0 -361
  74. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_execution_flow.md +0 -117
  75. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_granularity.md +0 -154
  76. package/core/.kenaz/main-memory/kenaz/pipeline/002_team_priority.md +0 -51
  77. package/core/.kenaz/main-memory/kenaz/pipeline/003_feature_id_system.md +0 -46
  78. package/core/.kenaz/main-memory/kenaz/rules/001_gen_007_self_containment.md +0 -108
  79. package/core/.kenaz/main-memory/kenaz/rules/001_rule_priority_system.md +0 -121
  80. package/core/.kenaz/main-memory/kenaz/rules/002_agt_006_pre_check.md +0 -0
  81. package/core/.kenaz/main-memory/kenaz/rules/003_ppl_002_task_archival.md +0 -48
  82. package/core/.kenaz/main-memory/kenaz/system/001_dual_track_task_system.md +0 -197
  83. package/core/.kenaz/main-memory/knowledge/patterns/001_json_bom_issue.md +0 -78
  84. package/core/.kenaz/main-memory/knowledge/patterns/001_leader_worker_pattern.md +0 -0
  85. package/core/.kenaz/main-memory/knowledge/patterns/002_scope_path_conflict.md +0 -115
  86. package/core/.kenaz/main-memory/knowledge/patterns/002_task_dependency_resolution.md +0 -223
  87. package/core/.kenaz/main-memory/knowledge/patterns/003_question_protocol.md +0 -242
  88. package/core/.kenaz/main-memory/knowledge/patterns/004_user_insight_value.md +0 -111
  89. package/core/.kenaz/main-memory/knowledge/patterns/005_file_lock_pattern.md +0 -274
  90. package/core/.kenaz/main-memory/knowledge/references/001_ppl_rules.md +0 -28
  91. package/core/.kenaz/main-memory/knowledge/solutions/001_json_bom_issue.md +0 -137
  92. package/core/.kenaz/main-memory/knowledge/solutions/001_team_invocation.md +0 -0
  93. package/core/.kenaz/main-memory/knowledge/solutions/002_passive_monitoring.md +0 -0
  94. package/core/.kenaz/main-memory/knowledge/solutions/003_windows_file_race_condition.md +0 -239
  95. package/core/.kenaz/main-memory/registry.json +0 -326
  96. package/core/.kenaz/main-memory/version.yaml +0 -58
  97. package/core/.kenaz/specialist/memory_guard_fired.json +0 -1
  98. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +0 -1
  99. package/core/.kenaz/specialist/memory_source_priority.yaml +0 -260
  100. package/core/.kenaz/specialist/prompt_1775.txt +0 -317
  101. package/core/.kenaz/specialist/prompt_1776.txt +0 -326
  102. package/core/.kenaz/specialist/prompt_1791.txt +0 -320
  103. package/core/.kenaz/specialist/prompt_1792.txt +0 -320
  104. package/core/.kenaz/specialist/prompt_1795.txt +0 -281
  105. package/core/.kenaz/specialist/prompt_1813.txt +0 -332
  106. package/core/.kenaz/specialist/prompt_1814.txt +0 -401
  107. package/core/.kenaz/specialist/prompt_1815.txt +0 -394
  108. package/core/.kenaz/specialist/prompt_1816.txt +0 -437
  109. package/core/.kenaz/specialist/prompt_1818.txt +0 -361
  110. package/core/.kenaz/specialist/prompt_1819.txt +0 -421
  111. package/core/.kenaz/specialist/prompt_1821.txt +0 -345
  112. package/core/.kenaz/specialist/prompt_1822.txt +0 -313
  113. package/core/.kenaz/specialist/prompt_1824.txt +0 -348
  114. package/core/.kenaz/specialist/prompt_1826.txt +0 -388
  115. package/core/.kenaz/specialist/rune_efe_salience_gap.md +0 -21
  116. package/core/.kenaz/specialist/task1825_update.json +0 -43
  117. package/core/.kenaz/specialist/taskgen/consolidation_i.json +0 -38
  118. package/core/.kenaz/specialist/taskgen/csharp_a.json +0 -44
  119. package/core/.kenaz/specialist/taskgen/csharp_b.json +0 -40
  120. package/core/.kenaz/specialist/taskgen/embedding_e.json +0 -34
  121. package/core/.kenaz/specialist/taskgen/hygiene_fg.json +0 -39
  122. package/core/.kenaz/specialist/taskgen/pathology_h.json +0 -36
  123. package/core/.kenaz/specialist/taskgen/unity_noise_d.json +0 -38
  124. package/core/.kenaz/specialist/taskgen/visibility_c.json +0 -38
  125. package/core/.specialist/Ansuz/decisions/ADR-requirement-graph-layer.md +0 -390
  126. package/core/.specialist/Ansuz/self_model_seed.backup.json +0 -100
  127. package/core/.specialist/ansuz_session_handoff.json +0 -96
  128. package/core/dev/ALAYA_FIELD_FEEDBACK_DESIGN.md +0 -126
  129. package/core/dev/ANSUZ_SCAFFOLD_DIET_2026-09-20.md +0 -231
  130. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +0 -355
  131. package/core/dev/ANSUZ_WORKFLOW_MODERNIZATION.md +0 -143
  132. package/core/dev/CORTEX_META_GRAPH_ASSESSMENT.md +0 -99
  133. package/core/dev/FREYA_DOWNSTREAM_BUGS_2026-09-19.md +0 -44
  134. package/core/dev/GLOBAL_MEMORY_IDENTITY_CONSOLIDATION.md +0 -263
  135. package/core/dev/GUARD_EFFECTIVENESS_DESIGN.md +0 -180
  136. package/core/dev/HEALTH_GATE_VARIANCE_ASSESSMENT.md +0 -271
  137. package/core/dev/HOOK_DIET_2026-09-21.md +0 -126
  138. package/core/dev/JEV_INTEGRATION_PLAN.md +0 -189
  139. package/core/dev/KENAZ_AGENT_CONNECT_v1_SPEC.md +0 -139
  140. package/core/dev/MOBILE_DESIGN_SPEC.md +0 -569
  141. package/core/dev/MULTI_ANSUZ_SPEC.md +0 -136
  142. package/core/dev/MUNINN_RETIREMENT.md +0 -115
  143. package/core/dev/PHASE3_ATTRIBUTION_POPULATION_DIAGNOSIS.md +0 -211
  144. package/core/dev/PHASE3_P3-2B_TASKLEVEL_PROBE.md +0 -83
  145. package/core/dev/PHASE3_P3-2_POPULATION_DISJOINTNESS.md +0 -83
  146. package/core/dev/PHASE3_P3-2_REMEASURE_REPORT.md +0 -231
  147. package/core/dev/PREDICTION_GROUNDING_DESIGN.md +0 -376
  148. package/core/dev/PRODUCT_SPEC.md +0 -317
  149. package/core/dev/PROJECT_REGISTRY_DUPLICATE_ASSESSMENT.md +0 -86
  150. package/core/dev/STARTUP_TIMELINE_TASK_1995.md +0 -181
  151. package/core/dev/SYNAPSE_WORKER_PER_PROJECT.md +0 -881
  152. package/core/dev/TASK_1680_P3-3_DISPATCH_SPEC.md +0 -96
  153. package/core/dev/TASK_1684_CALIBRATION_IMPACT_ANALYSIS.md +0 -170
  154. package/core/dev/TASK_1684_FORK_A_GOODHART_DESIGN.md +0 -171
  155. package/core/dev/TASK_1684_P3_2_REMEASURE_VALIDATION.md +0 -262
  156. package/core/dev/TASK_1903_SIGNAL_AUC_MEASUREMENT.md +0 -207
  157. package/core/dev/TASK_1904_BRANCH_INTEGRITY_AUDIT.md +0 -146
  158. package/core/dev/ansuz-eval/README.md +0 -38
  159. package/core/dev/ansuz-eval/build-fixtures.js +0 -87
  160. package/core/dev/ansuz-eval/grade.js +0 -96
  161. package/core/dev/ansuz-eval/grader.test.js +0 -117
  162. package/core/dev/ansuz-eval/tasks.md +0 -32
  163. package/core/dev/archive/ansuz/BOOT_FULL.md +0 -141
  164. package/core/dev/archive/ansuz/agents/ansuz-boot.md +0 -176
  165. package/core/dev/archive/ansuz/designs/alaya-passive-surfacing.md +0 -84
  166. package/core/dev/archive/ansuz/designs/cc_memory_indexing.md +0 -307
  167. package/core/dev/archive/ansuz/designs/check_guard.md +0 -322
  168. package/core/dev/archive/ansuz/designs/consequence_loop.md +0 -227
  169. package/core/dev/archive/ansuz/designs/mcp_kuzudb_lock_architecture.md +0 -312
  170. package/core/dev/archive/ansuz/designs/phase0_git_enrichment.md +0 -278
  171. package/core/dev/archive/ansuz/designs/refactor_mcp_tools_synapse.md +0 -490
  172. package/core/dev/archive/ansuz/designs/semantic_markdown_extraction.md +0 -167
  173. package/core/dev/archive/ansuz/designs/task_1372_prompt_injects_into.md +0 -193
  174. package/core/dev/archive/ansuz/designs/thought_stack.md +0 -286
  175. package/core/dev/archive/ansuz/investigations/reachability_unified_api_2026-04-11.md +0 -330
  176. package/core/dev/archive/ansuz/investigations/synapse_orphans_indexing_bug_2026-04-11.md +0 -352
  177. package/core/dev/archive/ansuz/investigations/synapse_orphans_reindex_verification_2026-04-11.md +0 -48
  178. package/core/dev/archive/ansuz/investigations/synapse_orphans_verification_2026-04-11.md +0 -170
  179. package/core/dev/archive/ansuz/legacy/kernel.yaml +0 -399
  180. package/core/dev/archive/ansuz/legacy/phases/phase_0.yaml +0 -418
  181. package/core/dev/archive/ansuz/legacy/phases/phase_1.yaml +0 -376
  182. package/core/dev/archive/ansuz/legacy/phases/phase_10.yaml +0 -35
  183. package/core/dev/archive/ansuz/legacy/phases/phase_11.yaml +0 -582
  184. package/core/dev/archive/ansuz/legacy/phases/phase_2.yaml +0 -94
  185. package/core/dev/archive/ansuz/legacy/phases/phase_3.yaml +0 -274
  186. package/core/dev/archive/ansuz/legacy/phases/phase_4.yaml +0 -67
  187. package/core/dev/archive/ansuz/legacy/phases/phase_5.yaml +0 -32
  188. package/core/dev/archive/ansuz/legacy/phases/phase_6.yaml +0 -91
  189. package/core/dev/archive/ansuz/legacy/phases/phase_7.yaml +0 -58
  190. package/core/dev/archive/ansuz/legacy/phases/phase_8.yaml +0 -146
  191. package/core/dev/archive/ansuz/legacy/phases/phase_9.yaml +0 -424
  192. package/core/dev/archive/ansuz/specs/INDEX_bifrost_hook_parity.yaml +0 -92
  193. package/core/dev/archive/ansuz/specs/active-inference-formation.yaml +0 -453
  194. package/core/dev/archive/ansuz/specs/brief_TASK_1228_userpromptsubmit.yaml +0 -191
  195. package/core/dev/archive/ansuz/specs/brief_TASK_1229_pretooluse_posttooluse.yaml +0 -250
  196. package/core/dev/archive/ansuz/specs/brief_TASK_1230_sessionstart_stop.yaml +0 -301
  197. package/core/dev/archive/ansuz/specs/brief_TASK_1231_verification.yaml +0 -272
  198. package/core/dev/archive/skills/feature_agent/SKILL.md +0 -289
  199. package/core/dev/design/PHASE4_DESIGN.md +0 -559
  200. package/core/dev/design/dashboard_docs_integration_PLAN.md +0 -388
  201. package/core/dev/design/matrix_format_ABBREVIATIONS.md +0 -655
  202. package/core/dev/design/matrix_format_DESIGN_SPEC.md +0 -601
  203. package/core/dev/design/matrix_format_DISCUSSION_SUMMARY.md +0 -484
  204. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +0 -13
  205. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +0 -9
  206. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +0 -14
  207. package/core/dev/design/matrix_format_SYNTAX_BNF.md +0 -754
  208. package/core/dev/design/matrix_format_TOKEN_COMPARISON.md +0 -484
  209. package/core/dev/design/matrix_v2_COGNITIVE_DESIGN.md +0 -503
  210. package/core/dev/design/matrix_v2_DISCUSSION_SUMMARY.md +0 -414
  211. package/core/dev/design/matrix_v2_EXAMPLE.matrix +0 -67
  212. package/core/dev/designs/EXPANDABLE_CARD_DESIGN_SPEC.md +0 -509
  213. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +0 -52
  214. package/core/dev/jev-eval/ANNOTATION_GUIDE.md +0 -68
  215. package/core/dev/jev-eval/BASELINE_COMPARISON.md +0 -45
  216. package/core/dev/jev-eval/CONTEXT_REVIEW.md +0 -31
  217. package/core/dev/jev-eval/EVALUATION_STATUS.md +0 -39
  218. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +0 -33
  219. package/core/dev/jev-eval/PACKAGING_VERIFICATION.md +0 -42
  220. package/core/dev/jev-eval/README.md +0 -101
  221. package/core/dev/jev-eval/THALAMUS_RANKING.md +0 -58
  222. package/core/dev/jev-eval/VALIDATION_PROGRESS.md +0 -54
  223. package/core/dev/jev-eval/cli.mjs +0 -50
  224. package/core/dev/jev-eval/context.mjs +0 -183
  225. package/core/dev/jev-eval/corpus.mjs +0 -186
  226. package/core/dev/jev-eval/fixtures/conversation-review.seed.jsonl +0 -6
  227. package/core/dev/jev-eval/fixtures/synthetic.jsonl +0 -11
  228. package/core/dev/jev-eval/metrics.mjs +0 -67
  229. package/core/dev/jev-eval/muninn-baseline.mjs +0 -119
  230. package/core/dev/jev-eval/providers.mjs +0 -95
  231. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +0 -32
  232. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +0 -48
  233. package/core/dev/jev-eval/reports/conversation-review.pending.json +0 -151
  234. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +0 -52
  235. package/core/dev/jev-eval/reports/length-probe-2026-09-20.json +0 -133
  236. package/core/dev/jev-eval/reports/live-smoke-2026-09-20.json +0 -616
  237. package/core/dev/jev-eval/reports/muninn-baseline-2026-09-20.json +0 -52
  238. package/core/dev/jev-eval/reports/resilience-2026-09-20.json +0 -520
  239. package/core/dev/jev-eval/reports/rules-baseline.json +0 -197
  240. package/core/dev/jev-eval/reports/synthetic-review.pending.json +0 -357
  241. package/core/dev/jev-eval/resilience.mjs +0 -71
  242. package/core/dev/jev-eval/review.mjs +0 -78
  243. package/core/dev/jev-eval/schema.mjs +0 -87
  244. package/core/dev/jev-eval/test/context.test.mjs +0 -95
  245. package/core/dev/jev-eval/test/corpus.test.mjs +0 -102
  246. package/core/dev/jev-eval/test/eval.test.mjs +0 -146
  247. package/core/dev/jev-eval/test/muninn-baseline.test.mjs +0 -71
  248. package/core/dev/jev-eval/test/resilience.test.mjs +0 -72
  249. package/core/dev/jev-eval/test/review.test.mjs +0 -61
  250. package/core/dev/pipeline/PHASE3_PLANNING_SUMMARY.md +0 -338
  251. package/core/dev/pipeline/PROGRESS.md +0 -113
  252. package/core/dev/pipeline/PROGRESS_template.md +0 -860
  253. package/core/dev/pipeline/QA_REPORT_F008.md +0 -431
  254. package/core/dev/pipeline/QA_REPORT_LOCAL_CLAUDE_DIAGNOSIS.md +0 -583
  255. package/core/dev/pipeline/README.md +0 -210
  256. package/core/dev/pipeline/WORKFLOW_GUIDE.md +0 -824
  257. package/core/dev/pipeline/archived/TASK_015_tauri_init.yaml +0 -53
  258. package/core/dev/pipeline/archived/TASK_016_tauri_commands.yaml +0 -54
  259. package/core/dev/pipeline/archived/TASK_017_rust_pty.yaml +0 -54
  260. package/core/dev/pipeline/archived/TASK_018_tauri_bundle.yaml +0 -53
  261. package/core/dev/pipeline/archived/TASK_019_release_workflow.yaml +0 -56
  262. package/core/dev/pipeline/archived/TASK_020_update_ui.yaml +0 -54
  263. package/core/dev/pipeline/archived/TASK_021_update_notification_ui.yaml +0 -55
  264. package/core/dev/pipeline/archived/TASK_022_remove_node_pty.yaml +0 -65
  265. package/core/dev/pipeline/archived/TASK_023_api_routes_migration.yaml +0 -86
  266. package/core/dev/pipeline/archived/TASK_024_feature_id_system.yaml +0 -51
  267. package/core/dev/pipeline/archived/TASK_025_executable_acceptance.yaml +0 -66
  268. package/core/dev/pipeline/archived/TASK_026_spec_versioning.yaml +0 -56
  269. package/core/dev/pipeline/archived/TASK_027_drift_detection.yaml +0 -60
  270. package/core/dev/pipeline/archived/TASK_028_tauri_pty_manager.yaml +0 -60
  271. package/core/dev/pipeline/archived/TASK_029_tauri_pty_commands.yaml +0 -62
  272. package/core/dev/pipeline/archived/TASK_030_frontend_session_adapter.yaml +0 -54
  273. package/core/dev/pipeline/archived/TASK_031_terminal_tauri_events.yaml +0 -56
  274. package/core/dev/pipeline/archived/TASK_041_scheduler_data_models.yaml +0 -54
  275. package/core/dev/pipeline/archived/TASK_042_path_lock_manager.yaml +0 -53
  276. package/core/dev/pipeline/archived/TASK_043_process_manager.yaml +0 -57
  277. package/core/dev/pipeline/archived/TASK_044_git_integration.yaml +0 -85
  278. package/core/dev/pipeline/archived/TASK_045_task_queue_manager.yaml +0 -54
  279. package/core/dev/pipeline/archived/TASK_046_scheduler_dispatcher.yaml +0 -60
  280. package/core/dev/pipeline/archived/TASK_047_tauri_scheduler_commands.yaml +0 -55
  281. package/core/dev/pipeline/archived/TASK_048_realtime_status_push.yaml +0 -92
  282. package/core/dev/pipeline/archived/TASK_049_frontend_scheduler_integration.yaml +0 -58
  283. package/core/dev/pipeline/archived/TASK_050_error_recovery.yaml +0 -56
  284. package/core/dev/pipeline/archived/TASK_051_optimization_proposals_backend.yaml +0 -53
  285. package/core/dev/pipeline/archived/TASK_052_optimization_proposals_ui.yaml +0 -58
  286. package/core/dev/pipeline/archived/TASK_053_optimization_proposals_diff_view.yaml +0 -54
  287. package/core/dev/pipeline/archived/TASK_054_multi_project_scheduler_state.yaml +0 -76
  288. package/core/dev/pipeline/archived/TASK_055_scheduler_api_project_scope.yaml +0 -64
  289. package/core/dev/pipeline/archived/TASK_056_frontend_scheduler_project_scope.yaml +0 -62
  290. package/core/dev/pipeline/archived/TASK_057_scheduler_module_structure.yaml +0 -54
  291. package/core/dev/pipeline/archived/TASK_058_scheduler_models_extract.yaml +0 -51
  292. package/core/dev/pipeline/archived/TASK_059_scheduler_core_extract.yaml +0 -51
  293. package/core/dev/pipeline/archived/TASK_060_scheduler_commands_extract.yaml +0 -51
  294. package/core/dev/pipeline/archived/TASK_061_scheduler_specialized_commands.yaml +0 -53
  295. package/core/dev/pipeline/archived/TASK_062_process_manager_module_structure.yaml +0 -56
  296. package/core/dev/pipeline/archived/TASK_063_process_manager_core_extract.yaml +0 -56
  297. package/core/dev/pipeline/archived/TASK_064_recovery_module_structure.yaml +0 -57
  298. package/core/dev/pipeline/archived/TASK_065_recovery_core_extract.yaml +0 -56
  299. package/core/dev/pipeline/archived/TASK_066_self_enhancement_scheduler_models.yaml +0 -60
  300. package/core/dev/pipeline/archived/TASK_067_agents_section_quick_actions.yaml +0 -53
  301. package/core/dev/pipeline/archived/TASK_067_self_enhancement_scheduler_core.yaml +0 -65
  302. package/core/dev/pipeline/archived/TASK_068_agent_workflow_rule_enhancement.yaml +0 -46
  303. package/core/dev/pipeline/archived/TASK_068_self_enhancement_tauri_commands.yaml +0 -61
  304. package/core/dev/pipeline/archived/TASK_069_agent_wizard_responsive.yaml +0 -46
  305. package/core/dev/pipeline/archived/TASK_069_self_enhancement_ui.yaml +0 -62
  306. package/core/dev/pipeline/archived/TASK_070_preview_panel_redesign.yaml +0 -62
  307. package/core/dev/pipeline/archived/TASK_070_self_enhancement_integration.yaml +0 -57
  308. package/core/dev/pipeline/archived/TASK_071_preview_panel_qa.yaml +0 -98
  309. package/core/dev/pipeline/archived/TASK_071_single_agent_config.yaml +0 -57
  310. package/core/dev/pipeline/archived/TASK_072_preview_modal_esc_fix.yaml +0 -71
  311. package/core/dev/pipeline/archived/TASK_072_product_review_module.yaml +0 -57
  312. package/core/dev/pipeline/archived/TASK_073_agents_page_component_refactor.yaml +0 -68
  313. package/core/dev/pipeline/archived/TASK_073_rename_single_agent.yaml +0 -64
  314. package/core/dev/pipeline/archived/TASK_074_preview_mode_ui_diagnosis.yaml +0 -71
  315. package/core/dev/pipeline/archived/TASK_074_single_agent_ui_toggle.yaml +0 -56
  316. package/core/dev/pipeline/archived/TASK_075_agents_page_component_refactor.yaml +0 -69
  317. package/core/dev/pipeline/archived/TASK_075_single_agent_integration_test.yaml +0 -75
  318. package/core/dev/pipeline/archived/TASK_076_preview_mode_ui_diagnosis.yaml +0 -70
  319. package/core/dev/pipeline/archived/TASK_076_single_agent_continuous_mode.yaml +0 -65
  320. package/core/dev/pipeline/archived/TASK_077_failure_directory_structure.yaml +0 -51
  321. package/core/dev/pipeline/archived/TASK_077_single_agent_typescript_types.yaml +0 -59
  322. package/core/dev/pipeline/archived/TASK_078_fail_001_agent_no_output.yaml +0 -53
  323. package/core/dev/pipeline/archived/TASK_078_single_agent_ui_simplify.yaml +0 -74
  324. package/core/dev/pipeline/archived/TASK_079_dashboard_rwd_responsive.yaml +0 -63
  325. package/core/dev/pipeline/archived/TASK_079_fail_002_json_bom.yaml +0 -56
  326. package/core/dev/pipeline/archived/TASK_080_fail_003_queue_pollution.yaml +0 -56
  327. package/core/dev/pipeline/archived/TASK_080_http_server_module.yaml +0 -55
  328. package/core/dev/pipeline/archived/TASK_081_failure_logging_tools.yaml +0 -57
  329. package/core/dev/pipeline/archived/TASK_081_http_api_routes.yaml +0 -62
  330. package/core/dev/pipeline/archived/TASK_082_frontend_api_adapter.yaml +0 -51
  331. package/core/dev/pipeline/archived/TASK_082_integrate_failure_to_workflow.yaml +0 -60
  332. package/core/dev/pipeline/archived/TASK_083_cleanup_nextjs_api.yaml +0 -48
  333. package/core/dev/pipeline/archived/TASK_083_task_queue_cleanup.yaml +0 -67
  334. package/core/dev/pipeline/archived/TASK_084_rust_dead_code_cleanup.yaml +0 -66
  335. package/core/dev/pipeline/archived/TASK_084_scheduler_sync_logic_fix.yaml +0 -68
  336. package/core/dev/pipeline/archived/TASK_085_http_api_web_mode_fixes.yaml +0 -46
  337. package/core/dev/pipeline/archived/TASK_085_memory_consolidation_0204_0205.yaml +0 -98
  338. package/core/dev/pipeline/archived/TASK_086_collapsible_preview_panel.yaml +0 -161
  339. package/core/dev/pipeline/archived/TASK_086_web_mode_feature_parity.yaml +0 -62
  340. package/core/dev/pipeline/archived/TASK_087_manual_memory_archival.yaml +0 -163
  341. package/core/dev/pipeline/archived/TASK_087_mobile_http_control.yaml +0 -68
  342. package/core/dev/pipeline/archived/TASK_088_fail_003_to_ppl_002_rule.yaml +0 -63
  343. package/core/dev/pipeline/archived/TASK_088_mobile_http_qa.yaml +0 -121
  344. package/core/dev/pipeline/archived/TASK_089_agent_collaboration_topic.yaml +0 -60
  345. package/core/dev/pipeline/archived/TASK_089_web_mode_monitor_fix.yaml +0 -58
  346. package/core/dev/pipeline/archived/TASK_090_cli_detection_fix.yaml +0 -61
  347. package/core/dev/pipeline/archived/TASK_090_ui_ux_lessons_topic.yaml +0 -63
  348. package/core/dev/pipeline/archived/TASK_091_expandable_card_design.yaml +0 -56
  349. package/core/dev/pipeline/archived/TASK_091_move_agent_section_components.yaml +0 -65
  350. package/core/dev/pipeline/archived/TASK_092_expandable_card_component.yaml +0 -60
  351. package/core/dev/pipeline/archived/TASK_092_refactor_agent_create_wizard.yaml +0 -84
  352. package/core/dev/pipeline/archived/TASK_093_taskcard_detail_integration.yaml +0 -57
  353. package/core/dev/pipeline/archived/TASK_093_update_barrel_exports_test.yaml +0 -84
  354. package/core/dev/pipeline/archived/TASK_094_ai_agent_generation_enhancement.yaml +0 -115
  355. package/core/dev/pipeline/archived/TASK_094_proposalcard_detail_integration.yaml +0 -55
  356. package/core/dev/pipeline/archived/TASK_095_preview_fixes.yaml +0 -129
  357. package/core/dev/pipeline/archived/TASK_095_single_agent_task_selector.yaml +0 -60
  358. package/core/dev/pipeline/archived/TASK_096_agents_page_ux_improvements.yaml +0 -163
  359. package/core/dev/pipeline/archived/TASK_096_single_agent_status_sync.yaml +0 -60
  360. package/core/dev/pipeline/archived/TASK_097_local_claude_error_logging.yaml +0 -59
  361. package/core/dev/pipeline/archived/TASK_097_single_agent_monitor_events.yaml +0 -59
  362. package/core/dev/pipeline/archived/TASK_098_product_manager_team_phase2.yaml +0 -60
  363. package/core/dev/pipeline/archived/TASK_098_single_agent_refactor_test.yaml +0 -58
  364. package/core/dev/pipeline/archived/TASK_099_backend_team_creation.yaml +0 -258
  365. package/core/dev/pipeline/archived/TASK_100_frontend_team_creation.yaml +0 -61
  366. package/core/dev/pipeline/archived/TASK_101_orchestrator_system.yaml +0 -403
  367. package/core/dev/pipeline/archived/TASK_102_designer_sre_teams.yaml +0 -90
  368. package/core/dev/pipeline/archived/TASK_103_integration_testing.yaml +0 -86
  369. package/core/dev/pipeline/archived/TASK_128_integration_testing.yaml +0 -83
  370. package/core/dev/pipeline/archived/TASK_134_cortex_v2_phase3_file_watcher.yaml +0 -65
  371. package/core/dev/pipeline/archived/TASK_134_team_http_api.yaml +0 -96
  372. package/core/dev/pipeline/archived/TASK_135_cortex_v2_phase3_git_monitor.yaml +0 -63
  373. package/core/dev/pipeline/archived/TASK_136_cortex_v2_phase3_change_analyzer.yaml +0 -69
  374. package/core/dev/pipeline/archived/TASK_137_cortex_v2_phase3_cache_invalidator.yaml +0 -67
  375. package/core/dev/pipeline/archived/TASK_137_team_orchestrator_integration.yaml +0 -93
  376. package/core/dev/pipeline/archived/TASK_138_cortex_v2_phase3_distributed_cache.yaml +0 -68
  377. package/core/dev/pipeline/archived/TASK_138_matrix_folder_structure.yaml +0 -61
  378. package/core/dev/pipeline/archived/TASK_139_cortex_v2_phase3_cache_prewarming.yaml +0 -65
  379. package/core/dev/pipeline/archived/TASK_146_unified_documentation.yaml +0 -141
  380. package/core/dev/pipeline/archived/TASK_147_pipeline_execution_rules.yaml +0 -76
  381. package/core/dev/pipeline/archived/TASK_148_update_claude_md.yaml +0 -77
  382. package/core/dev/pipeline/archived/TASK_149_fix_nextjs_mdx_serialization.yaml +0 -63
  383. package/core/dev/pipeline/archived/TASK_149_update_team_docs.yaml +0 -77
  384. package/core/dev/pipeline/archived/TASK_150_pipeline_workflow_guide.yaml +0 -82
  385. package/core/dev/pipeline/archived/TASK_164_fix_smart_context_switch.yaml +0 -49
  386. package/core/dev/pipeline/archived/TASK_165_ctags_symbol_index.yaml +0 -53
  387. package/core/dev/pipeline/archived/TASK_166_symbol_search_mcp_tool.yaml +0 -48
  388. package/core/dev/pipeline/archived/TASK_167_llm_module_summary.yaml +0 -55
  389. package/core/dev/pipeline/archived/TASK_168_map_reduce_context.yaml +0 -51
  390. package/core/dev/pipeline/archived/TASK_169_v2_integration_testing.yaml +0 -52
  391. package/core/dev/pipeline/backups/archive_2026-02-04T22-07-22/TASK_QUEUE_backup.json +0 -95
  392. package/core/dev/pipeline/docs/multi-agent-coordination.md +0 -446
  393. package/core/dev/pipeline/docs/overview.md +0 -406
  394. package/core/dev/pipeline/docs/task-management.md +0 -412
  395. package/core/dev/pipeline/docs/workflows.md +0 -32
  396. package/core/dev/pipeline/orchestrator/schemas/task_queue_schema.json +0 -58
  397. package/core/dev/pipeline/orchestrator/schemas/task_schema.json +0 -139
  398. package/core/dev/pipeline/plans/PLAN_task_cli_refactor.md +0 -281
  399. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +0 -27
  400. package/core/dev/plans/ANSUZ_SLIM_PLAN.md +0 -68
  401. package/core/dev/plans/CLI_FIRST_INSTALL_FLOW.md +0 -120
  402. package/core/dev/plans/FORMATION_RETIREMENT_PLAN.md +0 -313
  403. package/core/dev/plans/KUZU_REPLACEMENT_PLAN.md +0 -126
  404. package/core/dev/scripts/CRASH_DIAGNOSIS.md +0 -47
  405. package/core/dev/scripts/README.md +0 -142
  406. package/core/dev/scripts/RUN_ONCE.bat +0 -40
  407. package/core/dev/scripts/START_DEV_AGENT.bat +0 -63
  408. package/core/dev/scripts/START_MULTI_AGENT.bat +0 -80
  409. package/core/dev/scripts/dev_agent_scheduler.ps1 +0 -536
  410. package/core/dev/scripts/init_git.ps1 +0 -396
  411. package/core/dev/scripts/init_git.sh +0 -337
  412. package/core/dev/scripts/init_project.ps1 +0 -851
  413. package/core/dev/scripts/init_project.sh +0 -477
  414. package/core/dev/scripts/multi_agent_scheduler.ps1 +0 -2021
  415. package/core/dev/scripts/multi_agent_scheduler.sh +0 -1344
  416. package/core/dev/scripts/run_once.sh +0 -47
  417. package/core/dev/scripts/setup_rag.ps1 +0 -304
  418. package/core/dev/scripts/setup_rag.sh +0 -230
  419. package/core/dev/scripts/start_dev_agent.sh +0 -137
  420. package/core/dev/scripts/start_multi_agent.sh +0 -41
  421. package/core/dev/scripts/sync_task_queue.ps1 +0 -505
  422. package/core/dev/scripts/sync_task_queue.sh +0 -392
  423. package/core/dev/specs/agent-connect/PROTOCOL.md +0 -177
  424. package/core/dev/specs/agent-connect/SDK_GUIDE.md +0 -915
  425. package/core/dev/specs/agent-connect/examples/minimal-site/README.md +0 -137
  426. package/core/dev/specs/agent-connect/examples/minimal-site/package.json +0 -12
  427. package/core/dev/specs/agent-connect/examples/minimal-site/public/index.html +0 -116
  428. package/core/dev/specs/agent-connect/examples/minimal-site/public/install-redirect.js +0 -73
  429. package/core/dev/specs/agent-connect/examples/minimal-site/server.js +0 -516
  430. package/core/dev/specs/agent-connect/examples/minimal-site/test/smoke.test.mjs +0 -263
  431. 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
  432. package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-prompt-mojibake.md +0 -90
  433. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-07.md +0 -61
  434. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-08_relay-v1-conformance.md +0 -76
  435. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-09_v0.4-session-channel.md +0 -87
  436. package/core/dev/specs/agent-connect/history/FLOWPIX_REPLY_agent-hub_2026-09-08_relay-v1-answers.md +0 -68
  437. package/core/dev/specs/agent-connect/history/FLOWPIX_bridge_CONTRACT.md +0 -642
  438. package/core/dev/specs/agent-connect/history/FLOWPIX_spikes_relay_spike_relay.mjs +0 -244
  439. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-07.md +0 -77
  440. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_direction-change-v0.3.md +0 -44
  441. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-answers-ack.md +0 -37
  442. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-conformance.md +0 -56
  443. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_annotations-install-coldstart.md +0 -44
  444. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_empty-prompt-first-turn.md +0 -56
  445. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_prompt-mojibake-fixed.md +0 -48
  446. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_session-channel.md +0 -57
  447. package/core/dev/specs/agent-connect/history/PROTOCOL_v0.3_snapshot.md +0 -379
  448. package/core/dev/specs/agent-connect/history/README.md +0 -47
  449. package/core/dev/specs/peer/CODEX_INTERACTIVE_PUSH.md +0 -65
  450. package/core/dev/specs/peer/CODEX_MANAGED_DAEMON.md +0 -54
  451. package/core/dev/specs/peer/CODEX_PEER_PULL_SPIKE.md +0 -54
  452. package/core/dev/specs/peer/MODS_SPIKE.md +0 -133
  453. package/core/dev/specs/peer/PER_PROJECT_ADDRESSING.md +0 -143
  454. package/core/dev/specs/peer/SWARM_PROTOCOLS.md +0 -256
  455. package/core/dev/specs/peer/codex-hook-shim-peer.test.js +0 -113
  456. package/core/dev/specs/peer/codex-push-launcher.test.js +0 -142
  457. package/core/dev/specs/peer/setup-codex-hooks.test.js +0 -60
  458. package/core/dev/specs/peer-ansuz/DELIVERY_SPIKE.md +0 -397
  459. package/core/dev/specs/peer-ansuz/DESIGN.md +0 -109
  460. package/core/dev/specs/peer-ansuz/spike/claude_poke.js +0 -129
  461. package/core/dev/specs/peer-ansuz/spike/claude_session_start_hook.js +0 -37
  462. package/core/dev/specs/peer-ansuz/spike/claude_settings_hook.json +0 -14
  463. package/core/dev/specs/peer-ansuz/spike/codex_appserver_client.js +0 -105
  464. package/core/dev/specs/peer-ansuz/spike/codex_appserver_query.js +0 -29
  465. package/core/dev/specs/peer-ansuz/spike/extract_timeline.js +0 -26
  466. package/core/dev/specs/synapse/SYMBOL_IDENTITY.md +0 -305
  467. package/core/dev/spikes/A4-cypher-varlen.md +0 -176
  468. package/core/dev/spikes/bloat-rounds.sh +0 -25
  469. package/core/dev/spikes/mods/clean-claude.js +0 -9
  470. package/core/dev/spikes/mods/drive-probe.js +0 -29
  471. package/core/dev/spikes/mods/e2e-peer.js +0 -71
  472. package/core/dev/spikes/mods/evidence/e2e-peer-control.json +0 -17
  473. package/core/dev/spikes/mods/evidence/e2e-peer-mod.json +0 -17
  474. package/core/dev/spikes/mods/evidence/probe-006a6e65-d807-4bc1-b648-fd7d1edfe0b4.jsonl +0 -4
  475. package/core/dev/spikes/mods/evidence/probe-cebdf1f7-f9c4-47a8-83cd-7c0786177404.jsonl +0 -12
  476. package/core/dev/spikes/mods/evidence/probe-eb21147d-10ce-4c32-93ed-37ca37d88d5a.jsonl +0 -11
  477. package/core/dev/spikes/mods/evidence/stream-cebdf1f7.jsonl +0 -18
  478. package/core/dev/spikes/mods/kenaz-mod-probe/.claude-plugin/plugin.json +0 -1
  479. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/hooks.json +0 -1
  480. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/register.ts +0 -65
  481. 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 並行處理