kenaz 0.3.22 → 0.3.23

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