@bolloon/bolloon-agent 0.1.0 → 0.1.2

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 (581) hide show
  1. package/bin/bolloon-cli.cjs +157 -0
  2. package/bin/bolloon-daemon.sh +207 -0
  3. package/bin/bolloon.cmd +11 -0
  4. package/dist/agents/constraint-layer.js +10 -15
  5. package/dist/agents/pi-sdk.js +433 -106
  6. package/dist/agents/protocol.js +82 -1
  7. package/dist/agents/subagent-manager.js +2 -2
  8. package/dist/agents/workflow-engine.js +15 -20
  9. package/dist/agents/workflow-pivot-loop.js +541 -0
  10. package/dist/bollharness/src/index.js +5 -0
  11. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +6 -0
  12. package/dist/bollharness/src/scripts/checks/check_api_types.js +45 -0
  13. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +146 -0
  14. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +6 -0
  15. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +6 -0
  16. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +6 -0
  17. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +6 -0
  18. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +135 -0
  19. package/dist/bollharness/src/scripts/checks/check_doc_links.js +31 -0
  20. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +6 -0
  21. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +34 -0
  22. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +63 -0
  23. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +41 -0
  24. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +6 -0
  25. package/dist/bollharness/src/scripts/checks/check_security.js +48 -0
  26. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +6 -0
  27. package/dist/bollharness/src/scripts/checks/check_versions.js +6 -0
  28. package/dist/bollharness/src/scripts/checks/finding.js +13 -0
  29. package/dist/bollharness/src/scripts/checks/next_decision_number.js +20 -0
  30. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +6 -0
  31. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +8 -0
  32. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +8 -0
  33. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +8 -0
  34. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +8 -0
  35. package/dist/bollharness/src/scripts/context_router.js +67 -0
  36. package/dist/bollharness/src/scripts/deploy-guard.js +157 -0
  37. package/dist/bollharness/src/scripts/guard-feedback.js +192 -0
  38. package/dist/bollharness/src/scripts/guard_router.js +158 -0
  39. package/dist/bollharness/src/scripts/hooks/_hook_output.js +6 -0
  40. package/dist/bollharness/src/scripts/hooks/auto-python3.js +6 -0
  41. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +6 -0
  42. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +6 -0
  43. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +92 -0
  44. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +63 -0
  45. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +6 -0
  46. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +6 -0
  47. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +6 -0
  48. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +6 -0
  49. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +6 -0
  50. package/dist/bollharness/src/scripts/hooks/loop-detection.js +73 -0
  51. package/dist/bollharness/src/scripts/hooks/owner-guard.js +6 -0
  52. package/dist/bollharness/src/scripts/hooks/precompact.js +6 -0
  53. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +6 -0
  54. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +108 -0
  55. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +6 -0
  56. package/dist/bollharness/src/scripts/hooks/session-reflection.js +7 -0
  57. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +7 -0
  58. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +7 -0
  59. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +7 -0
  60. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +157 -0
  61. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +6 -0
  62. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +10 -0
  63. package/dist/bollharness/src/scripts/install/install-trust-token.js +7 -0
  64. package/dist/bollharness/src/scripts/install/multi_project_registry.js +9 -0
  65. package/dist/bollharness/src/scripts/install/phase2_auto.js +21 -0
  66. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +6 -0
  67. package/dist/bollharness/src/scripts/install/tier_selector.js +7 -0
  68. package/dist/bollharness/src/scripts/install/transcript_miner.js +7 -0
  69. package/dist/bollharness/src/scripts/lib/claim_patterns.js +10 -0
  70. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +12 -0
  71. package/dist/bollharness/src/scripts/sanitize.js +6 -0
  72. package/dist/bollharness-integration/channel-judgment-engine.js +530 -0
  73. package/dist/bollharness-integration/context-chain-router.js +383 -0
  74. package/dist/bollharness-integration/context-router-judgment.js +13 -21
  75. package/dist/bollharness-integration/context-router.js +22 -64
  76. package/dist/bollharness-integration/gate-state-machine.js +14 -19
  77. package/dist/bollharness-integration/gate-transition-hooks.js +16 -61
  78. package/dist/bollharness-integration/guard-checker.js +21 -68
  79. package/dist/bollharness-integration/index.js +14 -124
  80. package/dist/bollharness-integration/integration.js +13 -20
  81. package/dist/bollharness-integration/llm-judgment-engine.js +569 -0
  82. package/dist/bollharness-integration/skill-adapter.js +18 -64
  83. package/dist/cli-entry.js +261 -0
  84. package/dist/constraint-runtime/src/commands.js +17 -7
  85. package/dist/constraint-runtime/src/constraint/budget.js +1 -6
  86. package/dist/constraint-runtime/src/constraint/permission.js +1 -6
  87. package/dist/constraint-runtime/src/models.js +1 -3
  88. package/dist/constraint-runtime/src/tools.js +17 -7
  89. package/dist/constraints/index.js +1 -7
  90. package/dist/documents/reader.js +8 -49
  91. package/dist/heartbeat/DaemonManager.js +242 -0
  92. package/dist/heartbeat/HealthMonitor.js +285 -0
  93. package/dist/heartbeat/StartupVerifier.js +205 -0
  94. package/dist/heartbeat/Watchdog.js +168 -0
  95. package/dist/heartbeat/index.js +84 -0
  96. package/dist/heartbeat/types.js +5 -0
  97. package/dist/index.js +381 -28
  98. package/dist/llm/config-store.js +31 -57
  99. package/dist/llm/llm-judgment-client.js +389 -0
  100. package/dist/llm/pi-ai.js +9 -52
  101. package/dist/network/agent-network.js +46 -90
  102. package/dist/network/hybrid-messenger.js +125 -0
  103. package/dist/network/iroh-bootstrap.js +38 -0
  104. package/dist/network/iroh-discovery.js +145 -0
  105. package/dist/network/iroh-integration.js +9 -16
  106. package/dist/network/iroh-transport.js +10 -48
  107. package/dist/network/p2p.js +23 -62
  108. package/dist/network/storage/adapters/json-adapter.js +4 -42
  109. package/dist/network/storage/index.js +147 -0
  110. package/dist/network/storage/types.js +14 -0
  111. package/dist/pi-ecosystem/index.js +233 -0
  112. package/dist/pi-ecosystem-colony/index.js +29 -90
  113. package/dist/pi-ecosystem-goals/index.js +20 -74
  114. package/dist/pi-ecosystem-judgment/decision.js +29 -47
  115. package/dist/pi-ecosystem-judgment/distillation.js +16 -29
  116. package/dist/pi-ecosystem-judgment/human-value-store.js +13 -60
  117. package/dist/pi-ecosystem-judgment/index.js +21 -74
  118. package/dist/pi-ecosystem-judgment/value-injection.js +26 -72
  119. package/dist/pi-ecosystem-mcp/index.js +24 -78
  120. package/dist/pi-ecosystem-subagents/index.js +20 -69
  121. package/dist/social/ant-colony/AdaptiveHeartbeat.js +3 -8
  122. package/dist/social/ant-colony/PheromoneEngine.js +11 -49
  123. package/dist/social/ant-colony/index.js +6 -0
  124. package/dist/social/ant-colony/types.js +4 -8
  125. package/dist/social/channels/ChannelManager.js +8 -46
  126. package/dist/social/channels/DiapChannelBridge.js +9 -47
  127. package/dist/social/channels/InterestMatcher.js +2 -7
  128. package/dist/social/channels/channel-agent-session.js +309 -0
  129. package/dist/social/channels/channel-heartbeat-agent.js +494 -0
  130. package/dist/social/channels/diap-doc-parser.js +204 -0
  131. package/dist/social/channels/harness-workflow-integrator.js +446 -0
  132. package/dist/social/channels/index.js +9 -0
  133. package/dist/social/channels/types.js +3 -7
  134. package/dist/social/global-shared-context.js +6 -47
  135. package/dist/social/heartbeat.js +29 -72
  136. package/dist/social/persona/enhanced-persona.js +299 -0
  137. package/dist/web/client.js +302 -136
  138. package/dist/web/components/p2p/index.js +159 -9
  139. package/dist/web/components/p2p/p2p-connection.js +136 -0
  140. package/dist/web/components/p2p/p2p-manager.js +24 -0
  141. package/dist/web/components/p2p/p2p-store-memory.js +1 -1
  142. package/dist/web/components/p2p/types.js +7 -0
  143. package/dist/web/index.html +5 -0
  144. package/dist/web/style.css +118 -0
  145. package/package.json +12 -6
  146. package/scripts/build-cli.js +206 -0
  147. package/scripts/postinstall.js +153 -0
  148. package/src/agents/pi-sdk.ts +347 -28
  149. package/src/agents/protocol.ts +95 -1
  150. package/src/agents/workflow-pivot-loop.ts +674 -0
  151. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +34 -0
  152. package/src/cli-entry.ts +304 -0
  153. package/src/heartbeat/DaemonManager.ts +283 -0
  154. package/src/heartbeat/HealthMonitor.ts +316 -0
  155. package/src/heartbeat/StartupVerifier.ts +223 -0
  156. package/src/heartbeat/Watchdog.ts +198 -0
  157. package/src/heartbeat/index.ts +108 -0
  158. package/src/heartbeat/types.ts +82 -0
  159. package/src/llm/config-store.ts +23 -5
  160. package/src/network/iroh-transport.ts +3 -3
  161. package/src/web/client.js +302 -136
  162. package/src/web/components/p2p/P2PModal.tsx +91 -3
  163. package/src/web/components/p2p/index.ts +171 -9
  164. package/src/web/components/p2p/p2p-connection.ts +153 -1
  165. package/src/web/components/p2p/p2p-manager.ts +39 -1
  166. package/src/web/components/p2p/p2p-store-memory.ts +1 -1
  167. package/src/web/components/p2p/p2p-tools.ts +315 -0
  168. package/src/web/components/p2p/types.ts +58 -0
  169. package/src/web/index.html +5 -0
  170. package/src/web/server.ts +353 -36
  171. package/src/web/style.css +118 -0
  172. package/tsconfig.cli.json +16 -0
  173. package/tsconfig.electron.json +1 -1
  174. package/tsconfig.json +1 -2
  175. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  176. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  177. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  178. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  179. package/dist/electron-preload.js +0 -15
  180. package/dist/electron-preload.js.map +0 -1
  181. package/dist/electron.js +0 -206
  182. package/dist/electron.js.map +0 -1
  183. package/dist/test/constraint-layer.test.js +0 -164
  184. package/dist/test/global-shared-context.test.js +0 -315
  185. package/dist/test/pi-sdk.test.js +0 -47
  186. package/dist/test/set-persona.test.js +0 -38
  187. package/dist/test/subagent-manager.test.js +0 -276
  188. package/dist/test/workflow-engine.test.js +0 -87
  189. package/dist/web/server.js +0 -1647
  190. package/dist/web/server.js.map +0 -1
  191. package/dist/workflows/collaboration.js +0 -374
  192. package/dist/workflows/index.js +0 -54
  193. package/docs/agent-communication.md +0 -333
  194. package/docs/plans/2026-05-15-document-agent-design.md +0 -479
  195. package/docs/plans/2026-05-15-document-agent-implementation-plan.md +0 -792
  196. package/docs/plans/2026-05-16-chat-ui-design.md +0 -86
  197. package/docs/plans/2026-05-16-constraint-runtime-design.md +0 -106
  198. package/docs/plans/2026-05-16-constraint-runtime-implementation.md +0 -441
  199. package/docs//346/225/260/345/255/246/350/276/205/345/212/251/346/231/272/350/203/275/344/275/223-/346/240/270/345/277/203/346/225/210/346/236/234/345/256/232/344/271/211.md +0 -287
  200. package/src/bollharness/.boll/CLAUDE.md.template +0 -34
  201. package/src/bollharness/.boll/MANIFEST.yaml +0 -213
  202. package/src/bollharness/.boll/active-review-agents/.gitkeep +0 -0
  203. package/src/bollharness/.boll/agents/review-base.yaml +0 -108
  204. package/src/bollharness/.boll/deploy-allowlist.yaml +0 -38
  205. package/src/bollharness/.boll/inbox/schema/message-v1.json +0 -99
  206. package/src/bollharness/.boll/install-staging/.gitkeep +0 -0
  207. package/src/bollharness/.boll/issue-adapter.yaml +0 -31
  208. package/src/bollharness/.boll/plugins/boll-mode-toolkit/contracts/mode-contract.md +0 -85
  209. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  210. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  211. package/src/bollharness/.boll/rules/backend-routes.md +0 -31
  212. package/src/bollharness/.boll/rules/closure-semantics.md +0 -30
  213. package/src/bollharness/.boll/rules/env-vars.md +0 -32
  214. package/src/bollharness/.boll/rules/hanis-protocol.md +0 -145
  215. package/src/bollharness/.boll/rules/repo-structure.md +0 -42
  216. package/src/bollharness/.boll/rules/review-agent-isolation.md +0 -73
  217. package/src/bollharness/.boll/rules/source-of-truth.md +0 -33
  218. package/src/bollharness/.boll/settings.json +0 -180
  219. package/src/bollharness/.boll/settings.json.template +0 -31
  220. package/src/bollharness/.boll/skills/arch/SKILL.md +0 -372
  221. package/src/bollharness/.boll/skills/bug-pipeline/SKILL.md +0 -168
  222. package/src/bollharness/.boll/skills/bug-triage/SKILL.md +0 -161
  223. package/src/bollharness/.boll/skills/context-chains/SKILL.md +0 -250
  224. package/src/bollharness/.boll/skills/context-chains/context-chain-index.md +0 -48
  225. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/code_change_extractor.ts +0 -142
  226. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/debugging_extractor.ts +0 -126
  227. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/design_extractor.ts +0 -148
  228. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/planning_extractor.ts +0 -162
  229. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/question_extractor.ts +0 -116
  230. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/review_extractor.ts +0 -136
  231. package/src/bollharness/.boll/skills/crystal-learn/SKILL.md +0 -93
  232. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-0.md +0 -34
  233. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-1.md +0 -34
  234. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-2.md +0 -35
  235. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-3.md +0 -34
  236. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-4.md +0 -43
  237. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-5.md +0 -34
  238. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-6.md +0 -37
  239. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-7.md +0 -46
  240. package/src/bollharness/.boll/skills/guardian-fixer/PROMPT.md +0 -415
  241. package/src/bollharness/.boll/skills/guardian-fixer/SKILL.md +0 -320
  242. package/src/bollharness/.boll/skills/harness-dev/SKILL.md +0 -93
  243. package/src/bollharness/.boll/skills/harness-dev/examples/README.md +0 -227
  244. package/src/bollharness/.boll/skills/harness-dev-handoff/SKILL.md +0 -165
  245. package/src/bollharness/.boll/skills/harness-eng/SKILL.md +0 -110
  246. package/src/bollharness/.boll/skills/harness-eng-test/SKILL.md +0 -79
  247. package/src/bollharness/.boll/skills/harness-lab/SKILL.md +0 -170
  248. package/src/bollharness/.boll/skills/harness-ops/SKILL.md +0 -57
  249. package/src/bollharness/.boll/skills/harness-voice/SKILL.md +0 -183
  250. package/src/bollharness/.boll/skills/judgment/SKILL.md +0 -115
  251. package/src/bollharness/.boll/skills/lead/SKILL.md +0 -245
  252. package/src/bollharness/.boll/skills/lead/install-wow-harness.md +0 -77
  253. package/src/bollharness/.boll/skills/lead/ref-review-sop.md +0 -91
  254. package/src/bollharness/.boll/skills/lead/ref-stages.md +0 -129
  255. package/src/bollharness/.boll/skills/skill-discovery/SKILL.md +0 -169
  256. package/src/bollharness/.boll/skills/task-arch/SKILL.md +0 -106
  257. package/src/bollharness/.boll/skills/toolkit/SKILL.md +0 -57
  258. package/src/bollharness/.boll/tasks/.gitkeep +0 -0
  259. package/src/bollharness/.boll/toolkit-index.yaml +0 -112
  260. package/src/bollharness/.claude/agents/review-base.yaml +0 -108
  261. package/src/bollharness/.claude/plugins/boll-mode-toolkit/.claude-plugin/plugin.json +0 -44
  262. package/src/bollharness/.claude/plugins/boll-review-toolkit/.claude-plugin/plugin.json +0 -24
  263. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  264. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  265. package/src/bollharness/.claude/settings.json +0 -157
  266. package/src/bollharness/.claude/skills/arch/SKILL.md +0 -64
  267. package/src/bollharness/.claude/skills/crystal-learn/SKILL.md +0 -93
  268. package/src/bollharness/.claude/skills/guardian-fixer/PROMPT.md +0 -44
  269. package/src/bollharness/.claude/skills/guardian-fixer/SKILL.md +0 -324
  270. package/src/bollharness/.claude/skills/harness-dev/SKILL.md +0 -93
  271. package/src/bollharness/.claude/skills/harness-dev/examples/README.md +0 -17
  272. package/src/bollharness/.claude/skills/harness-dev-handoff/SKILL.md +0 -165
  273. package/src/bollharness/.claude/skills/harness-eng/SKILL.md +0 -183
  274. package/src/bollharness/.claude/skills/harness-eng-test/SKILL.md +0 -57
  275. package/src/bollharness/.claude/skills/harness-ops/SKILL.md +0 -57
  276. package/src/bollharness/.claude/skills/harness-voice/SKILL.md +0 -84
  277. package/src/bollharness/.claude/skills/lead/INDEX.md +0 -28
  278. package/src/bollharness/.claude/skills/lead/SKILL.md +0 -24
  279. package/src/bollharness/.claude/skills/lead/install-wow-harness.md +0 -77
  280. package/src/bollharness/.claude/skills/lead/ref-review-sop.md +0 -48
  281. package/src/bollharness/.claude/skills/lead/ref-stages.md +0 -58
  282. package/src/bollharness/.claude/skills/plan-lock/SKILL.md +0 -74
  283. package/src/bollharness/.claude/skills/skill-discovery/SKILL.md +0 -120
  284. package/src/bollharness/.claude/skills/task-arch/SKILL.md +0 -106
  285. package/src/bollharness/.claude/skills/toolkit/SKILL.md +0 -57
  286. package/src/bollharness/.claude/skills/toolkit/list.sh +0 -92
  287. package/src/bollharness/.githooks/pre-commit +0 -21
  288. package/src/bollharness/.github/workflows/ci.yml +0 -88
  289. package/src/bollharness/docs/decisions/ADR-030-guard-signal-protocol-and-governance-reload.md +0 -1076
  290. package/src/bollharness/docs/decisions/ADR-038-harness-optimization-strategy.md +0 -2039
  291. package/src/bollharness/docs/decisions/ADR-041-codex-claude-code-division-of-labor.md +0 -128
  292. package/src/bollharness/docs/decisions/ADR-H1-crystal-learn-revival.md +0 -188
  293. package/src/bollharness/docs/decisions/ADR-H2-identity-isolation.md +0 -183
  294. package/src/bollharness/docs/decisions/ADR-H3-memory-scope.md +0 -133
  295. package/src/bollharness/docs/decisions/ADR-H4-prompt-governance.md +0 -146
  296. package/src/bollharness/docs/decisions/ADR-H5-gate-quantization.md +0 -212
  297. package/src/bollharness/docs/decisions/ADR-H6-state-file-health.md +0 -211
  298. package/src/bollharness/docs/decisions/ADR-H8-issue-and-doc-compliance.md +0 -202
  299. package/src/bollharness/docs/decisions/ADR-H9-mailbox.md +0 -231
  300. package/src/bollharness/docs/decisions/PLAN-H1-crystal-learn-revival.md +0 -270
  301. package/src/bollharness/docs/decisions/PLAN-H2-identity-isolation.md +0 -291
  302. package/src/bollharness/docs/decisions/PLAN-H3-memory-scope.md +0 -228
  303. package/src/bollharness/docs/decisions/PLAN-H4-prompt-governance.md +0 -227
  304. package/src/bollharness/docs/decisions/PLAN-H5-gate-quantization.md +0 -239
  305. package/src/bollharness/docs/decisions/PLAN-H6-state-file-health.md +0 -325
  306. package/src/bollharness/docs/decisions/PLAN-H8-issue-and-doc-compliance.md +0 -242
  307. package/src/bollharness/docs/decisions/PLAN-H9-mailbox.md +0 -378
  308. package/src/bollharness/docs/launch-article-en.md +0 -276
  309. package/src/bollharness/docs/launch-article-zh.md +0 -305
  310. package/src/bollharness/docs/practice.html +0 -356
  311. package/src/bollharness/docs/practice.md +0 -82
  312. package/src/bollharness/docs/research/round-1/README.md +0 -11
  313. package/src/bollharness/docs/research/round-2/README.md +0 -11
  314. package/src/bollharness/docs/research/round-3/README.md +0 -11
  315. package/src/bollharness/docs/research/round-4/README.md +0 -11
  316. package/src/bollharness/docs/research/round-5/README.md +0 -11
  317. package/src/bollharness/docs/research/round-6/README.md +0 -11
  318. package/src/bollharness/package-lock.json +0 -48
  319. package/src/bollharness/reference/boll-reference/.claude/rules/backend-routes.md +0 -268
  320. package/src/bollharness/reference/boll-reference/.claude/rules/bridge.md +0 -20
  321. package/src/bollharness/reference/boll-reference/.claude/rules/closure-semantics.md +0 -30
  322. package/src/bollharness/reference/boll-reference/.claude/rules/coaching.md +0 -13
  323. package/src/bollharness/reference/boll-reference/.claude/rules/env-vars.md +0 -50
  324. package/src/bollharness/reference/boll-reference/.claude/rules/hackathon.md +0 -12
  325. package/src/bollharness/reference/boll-reference/.claude/rules/repo-structure.md +0 -184
  326. package/src/bollharness/reference/boll-reference/.claude/rules/review-agent-isolation.md +0 -112
  327. package/src/bollharness/reference/boll-reference/.claude/rules/scenes.md +0 -12
  328. package/src/bollharness/reference/boll-reference/.claude/skills/arch/SKILL.md +0 -551
  329. package/src/bollharness/reference/boll-reference/.claude/skills/boll-animation/SKILL.md +0 -26
  330. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/SKILL.md +0 -227
  331. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/agents/openai.yaml +0 -4
  332. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-failure-taxonomy.md +0 -142
  333. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-validation-ladder.md +0 -107
  334. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal/SKILL.md +0 -893
  335. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal-learn/SKILL.md +0 -89
  336. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/SKILL.md +0 -93
  337. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/examples/README.md +0 -209
  338. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev-handoff/SKILL.md +0 -165
  339. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng/SKILL.md +0 -110
  340. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-frontend/SKILL.md +0 -203
  341. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-hdc/SKILL.md +0 -27
  342. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-orchestrator/SKILL.md +0 -28
  343. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-prompt/SKILL.md +0 -27
  344. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-test/SKILL.md +0 -79
  345. package/src/bollharness/reference/boll-reference/.claude/skills/boll-lab/SKILL.md +0 -372
  346. package/src/bollharness/reference/boll-reference/.claude/skills/boll-run/SKILL.md +0 -437
  347. package/src/bollharness/reference/boll-reference/.claude/skills/boll-ux-appstore/SKILL.md +0 -27
  348. package/src/bollharness/reference/boll-reference/.claude/skills/boll-voice/SKILL.md +0 -442
  349. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/PROMPT.md +0 -421
  350. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/SKILL.md +0 -326
  351. package/src/bollharness/reference/boll-reference/.claude/skills/lead/SKILL.md +0 -155
  352. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-review-sop.md +0 -91
  353. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-stages.md +0 -129
  354. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-preview.png +0 -0
  355. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v2.png +0 -0
  356. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v3.png +0 -0
  357. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v4.png +0 -0
  358. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/SKILL.md +0 -425
  359. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-three-checks.md +0 -62
  360. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-wp-templates.md +0 -78
  361. package/src/bollharness/reference/boll-reference/.claude/skills/task-arch/SKILL.md +0 -76
  362. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/SKILL.md +0 -57
  363. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/beads-graph.sh +0 -153
  364. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/SKILL.md +0 -52
  365. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/beads-auto-link.sh +0 -76
  366. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/SKILL.md +0 -50
  367. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/beads-sync-proj.sh +0 -108
  368. package/src/bollharness/reference/boll-reference/docs/architecture/AGENT-PROFILE.md +0 -151
  369. package/src/bollharness/reference/boll-reference/docs/architecture/COST-STRUCTURE.md +0 -56
  370. package/src/bollharness/reference/boll-reference/docs/architecture/INDEX.md +0 -76
  371. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE1-INTENT-FIELD.md +0 -116
  372. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE2-CRYSTALLIZATION.md +0 -200
  373. package/src/bollharness/reference/boll-reference/docs/architecture/PRINCIPLES.md +0 -84
  374. package/src/bollharness/reference/boll-reference/docs/architecture/PROTOCOL-CORE.md +0 -209
  375. package/src/bollharness/reference/boll-reference/docs/architecture/VISION.md +0 -181
  376. package/src/bollharness/reference/boll-reference/docs/architecture/discussions/D-01-MARKET-SCENE-PROTOCOL.md +0 -754
  377. package/src/bollharness/templates/scaffold/.boll/guard/.gitkeep +0 -0
  378. package/src/bollharness/templates/scaffold/.boll/metrics/.gitkeep +0 -0
  379. package/src/bollharness/templates/scaffold/.boll/state/.gitkeep +0 -0
  380. package/src/bollharness/templates/scaffold/docs/INDEX.md +0 -3
  381. package/src/bollharness/templates/scaffold/docs/decisions/ADR_TEMPLATE.md +0 -38
  382. package/src/bollharness/templates/scaffold/docs/decisions/PLAN_TEMPLATE.md +0 -45
  383. package/src/bollharness/templates/scaffold/docs/decisions/tasks/.gitkeep +0 -2
  384. package/src/bollharness/templates/scaffold/docs/issues/.gitkeep +0 -0
  385. package/src/bollharness/templates/scaffold/docs/issues/GUARD_ISSUE_TEMPLATE.md +0 -35
  386. package/src/bollharness/templates/scaffold/docs/issues/ISSUE_TEMPLATE.md +0 -51
  387. package/src/bollharness/tsconfig.json +0 -26
  388. package/src/constraint-runtime/package-lock.json +0 -48
  389. package/src/constraint-runtime/package.json +0 -34
  390. package/src/constraint-runtime/src/_archive_helper.ts +0 -16
  391. package/src/constraint-runtime/src/agent/coordinator.ts +0 -71
  392. package/src/constraint-runtime/src/agent/index.ts +0 -1
  393. package/src/constraint-runtime/src/assistant/index.ts +0 -15
  394. package/src/constraint-runtime/src/bootstrap/index.ts +0 -15
  395. package/src/constraint-runtime/src/bootstrap_graph.ts +0 -17
  396. package/src/constraint-runtime/src/bridge/index.ts +0 -15
  397. package/src/constraint-runtime/src/buddy/index.ts +0 -15
  398. package/src/constraint-runtime/src/cli/index.ts +0 -15
  399. package/src/constraint-runtime/src/command_graph.ts +0 -20
  400. package/src/constraint-runtime/src/commands.ts +0 -83
  401. package/src/constraint-runtime/src/components/index.ts +0 -15
  402. package/src/constraint-runtime/src/constants/index.ts +0 -15
  403. package/src/constraint-runtime/src/constraint/budget.ts +0 -25
  404. package/src/constraint-runtime/src/constraint/index.ts +0 -3
  405. package/src/constraint-runtime/src/constraint/permission.ts +0 -28
  406. package/src/constraint-runtime/src/context.ts +0 -45
  407. package/src/constraint-runtime/src/coordinator/index.ts +0 -15
  408. package/src/constraint-runtime/src/cost_hook.ts +0 -6
  409. package/src/constraint-runtime/src/cost_tracker.ts +0 -9
  410. package/src/constraint-runtime/src/deferred_init.ts +0 -18
  411. package/src/constraint-runtime/src/direct_modes.ts +0 -13
  412. package/src/constraint-runtime/src/dynamic-tool-loader.ts +0 -115
  413. package/src/constraint-runtime/src/entrypoints/index.ts +0 -15
  414. package/src/constraint-runtime/src/execution_registry.ts +0 -41
  415. package/src/constraint-runtime/src/history.ts +0 -16
  416. package/src/constraint-runtime/src/hooks/index.ts +0 -15
  417. package/src/constraint-runtime/src/index.ts +0 -28
  418. package/src/constraint-runtime/src/ink.ts +0 -4
  419. package/src/constraint-runtime/src/keybindings/index.ts +0 -15
  420. package/src/constraint-runtime/src/memdir/index.ts +0 -15
  421. package/src/constraint-runtime/src/migrations/index.ts +0 -15
  422. package/src/constraint-runtime/src/models.ts +0 -49
  423. package/src/constraint-runtime/src/moreright/index.ts +0 -15
  424. package/src/constraint-runtime/src/native_ts/index.ts +0 -15
  425. package/src/constraint-runtime/src/output_styles/index.ts +0 -15
  426. package/src/constraint-runtime/src/parity_audit.ts +0 -23
  427. package/src/constraint-runtime/src/plugins/index.ts +0 -15
  428. package/src/constraint-runtime/src/port_manifest.ts +0 -20
  429. package/src/constraint-runtime/src/prefetch.ts +0 -17
  430. package/src/constraint-runtime/src/query.ts +0 -7
  431. package/src/constraint-runtime/src/reference_data/archive_surface_snapshot.json +0 -63
  432. package/src/constraint-runtime/src/reference_data/commands_snapshot.json +0 -1037
  433. package/src/constraint-runtime/src/reference_data/subsystems/OpenCLI.json +0 -10
  434. package/src/constraint-runtime/src/reference_data/subsystems/PolymarketSDK.json +0 -12
  435. package/src/constraint-runtime/src/reference_data/subsystems/SafeSDK.json +0 -14
  436. package/src/constraint-runtime/src/reference_data/subsystems/assistant.json +0 -8
  437. package/src/constraint-runtime/src/reference_data/subsystems/bootstrap.json +0 -8
  438. package/src/constraint-runtime/src/reference_data/subsystems/bridge.json +0 -32
  439. package/src/constraint-runtime/src/reference_data/subsystems/buddy.json +0 -13
  440. package/src/constraint-runtime/src/reference_data/subsystems/cli.json +0 -26
  441. package/src/constraint-runtime/src/reference_data/subsystems/components.json +0 -32
  442. package/src/constraint-runtime/src/reference_data/subsystems/constants.json +0 -28
  443. package/src/constraint-runtime/src/reference_data/subsystems/coordinator.json +0 -8
  444. package/src/constraint-runtime/src/reference_data/subsystems/entrypoints.json +0 -15
  445. package/src/constraint-runtime/src/reference_data/subsystems/hooks.json +0 -32
  446. package/src/constraint-runtime/src/reference_data/subsystems/keybindings.json +0 -21
  447. package/src/constraint-runtime/src/reference_data/subsystems/memdir.json +0 -15
  448. package/src/constraint-runtime/src/reference_data/subsystems/migrations.json +0 -18
  449. package/src/constraint-runtime/src/reference_data/subsystems/moreright.json +0 -8
  450. package/src/constraint-runtime/src/reference_data/subsystems/native_ts.json +0 -11
  451. package/src/constraint-runtime/src/reference_data/subsystems/outputStyles.json +0 -8
  452. package/src/constraint-runtime/src/reference_data/subsystems/plugins.json +0 -9
  453. package/src/constraint-runtime/src/reference_data/subsystems/remote.json +0 -11
  454. package/src/constraint-runtime/src/reference_data/subsystems/schemas.json +0 -8
  455. package/src/constraint-runtime/src/reference_data/subsystems/screens.json +0 -10
  456. package/src/constraint-runtime/src/reference_data/subsystems/server.json +0 -10
  457. package/src/constraint-runtime/src/reference_data/subsystems/services.json +0 -32
  458. package/src/constraint-runtime/src/reference_data/subsystems/skills.json +0 -27
  459. package/src/constraint-runtime/src/reference_data/subsystems/state.json +0 -13
  460. package/src/constraint-runtime/src/reference_data/subsystems/types.json +0 -18
  461. package/src/constraint-runtime/src/reference_data/subsystems/upstreamproxy.json +0 -9
  462. package/src/constraint-runtime/src/reference_data/subsystems/utils.json +0 -32
  463. package/src/constraint-runtime/src/reference_data/subsystems/vim.json +0 -12
  464. package/src/constraint-runtime/src/reference_data/subsystems/voice.json +0 -8
  465. package/src/constraint-runtime/src/reference_data/tools_snapshot.json +0 -1042
  466. package/src/constraint-runtime/src/remote/index.ts +0 -15
  467. package/src/constraint-runtime/src/remote_runtime.ts +0 -17
  468. package/src/constraint-runtime/src/runtime/index.ts +0 -1
  469. package/src/constraint-runtime/src/runtime/session.ts +0 -42
  470. package/src/constraint-runtime/src/schemas/index.ts +0 -15
  471. package/src/constraint-runtime/src/screens/index.ts +0 -15
  472. package/src/constraint-runtime/src/server/index.ts +0 -15
  473. package/src/constraint-runtime/src/services/index.ts +0 -15
  474. package/src/constraint-runtime/src/session_store.ts +0 -32
  475. package/src/constraint-runtime/src/setup.ts +0 -50
  476. package/src/constraint-runtime/src/skills/index.ts +0 -1
  477. package/src/constraint-runtime/src/skills/skill-registry.ts +0 -40
  478. package/src/constraint-runtime/src/state/index.ts +0 -15
  479. package/src/constraint-runtime/src/system_init.ts +0 -21
  480. package/src/constraint-runtime/src/thinking/engine.ts +0 -61
  481. package/src/constraint-runtime/src/thinking/index.ts +0 -1
  482. package/src/constraint-runtime/src/tool_pool.ts +0 -20
  483. package/src/constraint-runtime/src/tools/OpenCLI/execAdapter.ts +0 -12
  484. package/src/constraint-runtime/src/tools/OpenCLI/listAdapters.ts +0 -12
  485. package/src/constraint-runtime/src/tools/OpenCLI/runCommand.ts +0 -13
  486. package/src/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.ts +0 -10
  487. package/src/constraint-runtime/src/tools/PolymarketSDK/createOrder.ts +0 -13
  488. package/src/constraint-runtime/src/tools/PolymarketSDK/getMarket.ts +0 -14
  489. package/src/constraint-runtime/src/tools/PolymarketSDK/getOrders.ts +0 -10
  490. package/src/constraint-runtime/src/tools/PolymarketSDK/listMarkets.ts +0 -24
  491. package/src/constraint-runtime/src/tools/SafeSDK/confirmTransaction.ts +0 -13
  492. package/src/constraint-runtime/src/tools/SafeSDK/createTransaction.ts +0 -23
  493. package/src/constraint-runtime/src/tools/SafeSDK/deploySafe.ts +0 -12
  494. package/src/constraint-runtime/src/tools/SafeSDK/executeTransaction.ts +0 -12
  495. package/src/constraint-runtime/src/tools/SafeSDK/getBalance.ts +0 -10
  496. package/src/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.ts +0 -10
  497. package/src/constraint-runtime/src/tools/SafeSDK/proposeTransaction.ts +0 -14
  498. package/src/constraint-runtime/src/tools/WalletTools/autoPay.ts +0 -58
  499. package/src/constraint-runtime/src/tools/WalletTools/createWallet.ts +0 -19
  500. package/src/constraint-runtime/src/tools/WalletTools/getBalance.ts +0 -28
  501. package/src/constraint-runtime/src/tools/WalletTools/importWallet.ts +0 -34
  502. package/src/constraint-runtime/src/tools/WalletTools/sendTransaction.ts +0 -50
  503. package/src/constraint-runtime/src/tools/WalletTools/signMessage.ts +0 -23
  504. package/src/constraint-runtime/src/tools/WalletTools/transferToken.ts +0 -49
  505. package/src/constraint-runtime/src/tools.ts +0 -100
  506. package/src/constraint-runtime/src/transcript.ts +0 -23
  507. package/src/constraint-runtime/src/types/index.ts +0 -15
  508. package/src/constraint-runtime/src/upstream_proxy/index.ts +0 -15
  509. package/src/constraint-runtime/src/utils/index.ts +0 -15
  510. package/src/constraint-runtime/src/vim/index.ts +0 -15
  511. package/src/constraint-runtime/src/voice/index.ts +0 -15
  512. package/src/constraint-runtime/tests/agent.test.ts +0 -20
  513. package/src/constraint-runtime/tests/constraint.test.ts +0 -47
  514. package/src/constraint-runtime/tests/skill.test.ts +0 -23
  515. package/src/constraint-runtime/tests/thinking.test.ts +0 -28
  516. package/src/constraint-runtime/tsconfig.json +0 -13
  517. package/src/pi-ecosystem/index.ts +0 -453
  518. package/src/pi-ecosystem-colony/index.ts +0 -482
  519. package/src/pi-ecosystem-goals/index.ts +0 -585
  520. package/src/pi-ecosystem-judgment/decision.ts +0 -431
  521. package/src/pi-ecosystem-judgment/distillation.ts +0 -398
  522. package/src/pi-ecosystem-judgment/human-value-store.ts +0 -580
  523. package/src/pi-ecosystem-judgment/index.ts +0 -678
  524. package/src/pi-ecosystem-judgment/value-injection.ts +0 -744
  525. package/src/pi-ecosystem-mcp/index.ts +0 -427
  526. package/src/pi-ecosystem-subagents/index.ts +0 -408
  527. package/src/test/ai-judgment-test.ts +0 -92
  528. package/src/test/bollharness-integration.test.ts +0 -398
  529. package/src/test/channel-agent-multi-dialogue.ts +0 -265
  530. package/src/test/channel-heartbeat-agent-test.ts +0 -244
  531. package/src/test/constraint-layer.test.ts +0 -191
  532. package/src/test/diap-identity-test.ts +0 -222
  533. package/src/test/diap-quick-test.ts +0 -73
  534. package/src/test/global-shared-context.test.ts +0 -393
  535. package/src/test/harness-judgment-injection.test.ts +0 -353
  536. package/src/test/harness-workflow-integrator-test.ts +0 -285
  537. package/src/test/human-value-store.test.ts +0 -316
  538. package/src/test/hybrid-integration-test.ts +0 -126
  539. package/src/test/hybrid-messenger-verify.ts +0 -68
  540. package/src/test/iroh-bistream-debug.ts +0 -50
  541. package/src/test/iroh-communication.test.ts +0 -81
  542. package/src/test/iroh-debug-test.ts +0 -69
  543. package/src/test/iroh-diap-test.ts +0 -90
  544. package/src/test/iroh-direct-connect.ts +0 -65
  545. package/src/test/iroh-e2e-fixed.ts +0 -106
  546. package/src/test/iroh-e2e-same-process.ts +0 -83
  547. package/src/test/iroh-e2e.ts +0 -83
  548. package/src/test/iroh-final-e2e.ts +0 -84
  549. package/src/test/iroh-relay-test.ts +0 -46
  550. package/src/test/iroh-simple-test.ts +0 -49
  551. package/src/test/iroh-transport-verify.ts +0 -60
  552. package/src/test/iroh-transport.test.ts +0 -47
  553. package/src/test/iroh-two-nodes.ts +0 -87
  554. package/src/test/iroh-verify.ts +0 -55
  555. package/src/test/judgment-decision.test.ts +0 -373
  556. package/src/test/llm-judgment-integration.test.ts +0 -257
  557. package/src/test/p2p-agent-complex-dialogue.ts +0 -490
  558. package/src/test/p2p-agent-dialogue.ts +0 -423
  559. package/src/test/p2p-agent-full-bidirectional.ts +0 -686
  560. package/src/test/p2p-agent-harness-flow.ts +0 -562
  561. package/src/test/p2p-agent-harness-single.ts +0 -175
  562. package/src/test/p2p-ai-dialogue-test.ts +0 -374
  563. package/src/test/p2p-cid-connect-test.ts +0 -245
  564. package/src/test/p2p-connect-receiver.ts +0 -85
  565. package/src/test/p2p-iroh-test.ts +0 -214
  566. package/src/test/p2p-minimal-test.ts +0 -264
  567. package/src/test/p2p-node-1.ts +0 -172
  568. package/src/test/p2p-node-2.ts +0 -172
  569. package/src/test/p2p-server.ts +0 -335
  570. package/src/test/p2p-two-nodes-test.ts +0 -542
  571. package/src/test/pi-sdk.test.ts +0 -47
  572. package/src/test/set-persona.ts +0 -56
  573. package/src/test/simple.test.ts +0 -11
  574. package/src/test/storage-integration.test.ts +0 -191
  575. package/src/test/subagent-manager.test.ts +0 -392
  576. package/src/test/test-gate-flow.test.ts +0 -92
  577. package/src/test/workflow-engine.test.ts +0 -101
  578. package/src/workflows/collaboration.ts +0 -455
  579. package/src/workflows/index.ts +0 -64
  580. package/vitest.config.ts +0 -12
  581. package//346/203/263/346/263/225.md +0 -79
@@ -1,162 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * planning_extractor.ts
4
- *
5
- * 从 planning 类型会话中萃取核心摘要
6
- * 遵循 context-chains SKILL.md 的 planning schema
7
- */
8
-
9
- interface PlanningSummary {
10
- session_id: string;
11
- work_type: 'planning';
12
- created_at: string;
13
- gate_at_session: number;
14
- '关联上下文': Array<{ session_id: string; reason: string; relevance: number }>;
15
- '核心摘要': {
16
- goals: Array<{
17
- description: string;
18
- acceptance_criteria: string[];
19
- }>;
20
- dependencies: Array<{
21
- on_artifact: string;
22
- type: 'blocks' | 'informs';
23
- }>;
24
- risks: Array<{
25
- description: string;
26
- probability: 'high' | 'medium' | 'low';
27
- mitigation: string;
28
- }>;
29
- decision_gaps: Array<{
30
- question: string;
31
- stakes: string;
32
- owner: string;
33
- }>;
34
- };
35
- '风险点': Array<{ 描述: string; 概率: 'high' | 'medium' | 'low'; 缓解措施: string }>;
36
- '遗迹': string[];
37
- }
38
-
39
- function extractGoals(text: string): PlanningSummary['核心摘要']['goals'] {
40
- const goals: PlanningSummary['核心摘要']['goals'] = [];
41
-
42
- const goalPattern = /(?:目标|goal|目的|我们要|需要完成):\s*(.+)/gi;
43
- let match;
44
-
45
- while ((match = goalPattern.exec(text)) !== null) {
46
- goals.push({
47
- description: match[1].trim(),
48
- acceptance_criteria: [],
49
- });
50
- }
51
-
52
- return goals;
53
- }
54
-
55
- function extractDependencies(text: string): PlanningSummary['核心摘要']['dependencies'] {
56
- const deps: PlanningSummary['核心摘要']['dependencies'] = [];
57
-
58
- const depPattern = /(?:依赖|depends on|取决于|blocked by|依赖于):\s*(.+)/gi;
59
- let match;
60
-
61
- while ((match = depPattern.exec(text)) !== null) {
62
- const artifact = match[1].trim();
63
- const type = text.toLowerCase().includes('block') ? 'blocks' : 'informs';
64
- deps.push({ on_artifact: artifact, type });
65
- }
66
-
67
- return deps;
68
- }
69
-
70
- function extractRisks(text: string): PlanningSummary['核心摘要']['risks'] {
71
- const risks: PlanningSummary['核心摘要']['risks'] = [];
72
-
73
- const riskKeywords = ['风险', 'risk', '可能失败', '不确定性', 'concern'];
74
- const probabilityKeywords = {
75
- high: ['高', '很可能', 'likely', 'high probability'],
76
- medium: ['中', '可能', 'possible', 'medium'],
77
- low: ['低', '不太可能', 'unlikely', 'low probability'],
78
- };
79
-
80
- const sentences = text.split(/[.!?]/);
81
- for (const sentence of sentences) {
82
- const lower = sentence.toLowerCase();
83
- for (const keyword of riskKeywords) {
84
- if (lower.includes(keyword)) {
85
- let probability: 'high' | 'medium' | 'low' = 'medium';
86
- for (const [prob, words] of Object.entries(probabilityKeywords)) {
87
- if (words.some(w => lower.includes(w))) {
88
- probability = prob as 'high' | 'medium' | 'low';
89
- break;
90
- }
91
- }
92
- risks.push({
93
- description: sentence.trim().slice(0, 100),
94
- probability,
95
- mitigation: '',
96
- });
97
- }
98
- }
99
- }
100
-
101
- return risks;
102
- }
103
-
104
- function extractDecisionGaps(text: string): PlanningSummary['核心摘要']['decision_gaps'] {
105
- const gaps: PlanningSummary['核心摘要']['decision_gaps'] = [];
106
-
107
- const gapPatterns = [
108
- /(?:待定|未决定|TBD|to be determined|还未确定):\s*(.+)/gi,
109
- /(?:谁决定|who decides|owner):\s*(.+)/gi,
110
- /(?:决策缺口|decision gap):\s*(.+)/gi,
111
- ];
112
-
113
- for (const pattern of gapPatterns) {
114
- let match;
115
- while ((match = pattern.exec(text)) !== null) {
116
- gaps.push({
117
- question: match[1].trim(),
118
- stakes: '',
119
- owner: '',
120
- });
121
- }
122
- }
123
-
124
- return gaps;
125
- }
126
-
127
- function buildSummary(input: {
128
- sessionId: string;
129
- gate: number;
130
- conversationText: string;
131
- relatedSessions?: Array<{ sessionId: string; reason: string; relevance: number }>;
132
- }): PlanningSummary {
133
- return {
134
- session_id: input.sessionId,
135
- work_type: 'planning',
136
- created_at: new Date().toISOString(),
137
- gate_at_session: input.gate,
138
- '关联上下文': input.relatedSessions || [],
139
- '核心摘要': {
140
- goals: extractGoals(input.conversationText),
141
- dependencies: extractDependencies(input.conversationText),
142
- risks: extractRisks(input.conversationText),
143
- decision_gaps: extractDecisionGaps(input.conversationText),
144
- },
145
- '风险点': [],
146
- '遗迹': [],
147
- };
148
- }
149
-
150
- export { buildSummary, type PlanningSummary };
151
-
152
- if (require.main === module) {
153
- const args = process.argv.slice(2);
154
- const [sessionId, gate] = args;
155
- const fs = require('fs');
156
- const conversationText = args[2]
157
- ? fs.readFileSync(args[2], 'utf-8')
158
- : fs.readFileSync('/dev/stdin', 'utf-8');
159
-
160
- const summary = buildSummary({ sessionId, gate: parseInt(gate, 10), conversationText });
161
- console.log(JSON.stringify(summary, null, 2));
162
- }
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * question_extractor.ts
4
- *
5
- * 从 question 类型会话中萃取核心摘要
6
- * 遵循 context-chains SKILL.md 的 question schema
7
- */
8
-
9
- interface QuestionSummary {
10
- session_id: string;
11
- work_type: 'question';
12
- created_at: string;
13
- gate_at_session: number;
14
- '关联上下文': Array<{ session_id: string; reason: string; relevance: number }>;
15
- '核心摘要': {
16
- question_type: 'concept' | 'implementation' | 'debugging' | 'tool_usage' | 'unknown';
17
- answer_summary: string;
18
- source: string;
19
- related_context: Array<{
20
- session_id: string;
21
- relevance: number;
22
- }>;
23
- };
24
- '决策缺口': Array<{ 描述: string; 影响: string; 需要什么才能关闭: string }>;
25
- '遗迹': string[];
26
- }
27
-
28
- function extractQuestionType(text: string): QuestionSummary['核心摘要']['question_type'] {
29
- const lower = text.toLowerCase();
30
-
31
- if (lower.includes('concept') || lower.includes('概念') || lower.includes('原理')) {
32
- return 'concept';
33
- }
34
- if (lower.includes('implement') || lower.includes('实现') || lower.includes('怎么写')) {
35
- return 'implementation';
36
- }
37
- if (lower.includes('debug') || lower.includes('调试') || lower.includes('报错')) {
38
- return 'debugging';
39
- }
40
- if (lower.includes('tool') || lower.includes('命令') || lower.includes('怎么用')) {
41
- return 'tool_usage';
42
- }
43
-
44
- return 'unknown';
45
- }
46
-
47
- function extractAnswer(text: string): string {
48
- // Look for answer patterns
49
- const answerPatterns = [
50
- /(?:答案是|answer is|正确答案是|应该是):\s*(.+)/gi,
51
- /(?:总结|summary|结论|conclusion):\s*(.+)/gi,
52
- ];
53
-
54
- for (const pattern of answerPatterns) {
55
- const match = pattern.exec(text);
56
- if (match) {
57
- return match[1].trim();
58
- }
59
- }
60
-
61
- return '';
62
- }
63
-
64
- function extractSource(text: string): string {
65
- const sourcePatterns = [
66
- /(?:来自|from|来源|source):\s*(.+)/gi,
67
- /(?:文档|doc|文档说明):\s*(.+)/gi,
68
- /(?:代码|code):\s*(.+)/gi,
69
- ];
70
-
71
- for (const pattern of sourcePatterns) {
72
- const match = pattern.exec(text);
73
- if (match) {
74
- return match[1].trim();
75
- }
76
- }
77
-
78
- return '';
79
- }
80
-
81
- function buildSummary(input: {
82
- sessionId: string;
83
- gate: number;
84
- conversationText: string;
85
- relatedSessions?: Array<{ sessionId: string; reason: string; relevance: number }>;
86
- }): QuestionSummary {
87
- return {
88
- session_id: input.sessionId,
89
- work_type: 'question',
90
- created_at: new Date().toISOString(),
91
- gate_at_session: input.gate,
92
- '关联上下文': input.relatedSessions || [],
93
- '核心摘要': {
94
- question_type: extractQuestionType(input.conversationText),
95
- answer_summary: extractAnswer(input.conversationText),
96
- source: extractSource(input.conversationText),
97
- related_context: [],
98
- },
99
- '决策缺口': [],
100
- '遗迹': [],
101
- };
102
- }
103
-
104
- export { buildSummary, type QuestionSummary };
105
-
106
- if (require.main === module) {
107
- const args = process.argv.slice(2);
108
- const [sessionId, gate] = args;
109
- const fs = require('fs');
110
- const conversationText = args[2]
111
- ? fs.readFileSync(args[2], 'utf-8')
112
- : fs.readFileSync('/dev/stdin', 'utf-8');
113
-
114
- const summary = buildSummary({ sessionId, gate: parseInt(gate, 10), conversationText });
115
- console.log(JSON.stringify(summary, null, 2));
116
- }
@@ -1,136 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * review_extractor.ts
4
- *
5
- * 从 review 类型会话中萃取核心摘要
6
- * 遵循 context-chains SKILL.md 的 review schema
7
- */
8
-
9
- interface ReviewSummary {
10
- session_id: string;
11
- work_type: 'review';
12
- created_at: string;
13
- gate_at_session: number;
14
- '关联上下文': Array<{ session_id: string; reason: string; relevance: number }>;
15
- '核心摘要': {
16
- verdict: 'PASS' | 'BLOCK' | 'CONDITIONAL';
17
- reviewed_artifact: string;
18
- blocking_issues: Array<{
19
- severity: 'blocker' | 'warning' | 'nit';
20
- description: string;
21
- pattern?: string;
22
- }>;
23
- non_blocking_observations: string[];
24
- reviewer_preference_patterns: Array<{ pattern: string; frequency: number }>;
25
- };
26
- '决策缺口': Array<{ 描述: string; 影响: string; 需要什么才能关闭: string }>;
27
- '风险点': Array<{ 描述: string; 概率: 'high' | 'medium' | 'low'; 缓解措施: string }>;
28
- '遗迹': string[];
29
- }
30
-
31
- function extractVerdict(conversationText: string): ReviewSummary['核心摘要']['verdict'] {
32
- const upper = conversationText.toUpperCase();
33
- if (upper.includes('BLOCK') || upper.includes('REJECT') || upper.includes('FAIL')) {
34
- return 'BLOCK';
35
- }
36
- if (upper.includes('CONDITIONAL') || upper.includes('CONDITION')) {
37
- return 'CONDITIONAL';
38
- }
39
- return 'PASS';
40
- }
41
-
42
- function extractBlockingIssues(conversationText: string): ReviewSummary['核心摘要']['blocking_issues'] {
43
- const issues: ReviewSummary['核心摘要']['blocking_issues'] = [];
44
-
45
- // Extract patterns like "blocker:", "issue:", "problem:"
46
- const blockerPattern = /(?:blocker|blocking|issue|problem|concern):\s*(.+)/gi;
47
- let match;
48
-
49
- while ((match = blockerPattern.exec(conversationText)) !== null) {
50
- const desc = match[1].trim();
51
- const severity = desc.toLowerCase().includes('nit')
52
- ? 'nit'
53
- : desc.toLowerCase().includes('warning')
54
- ? 'warning'
55
- : 'blocker';
56
-
57
- issues.push({ severity, description: desc });
58
- }
59
-
60
- return issues;
61
- }
62
-
63
- function extractPreferencePatterns(conversationText: string): ReviewSummary['核心摘要']['reviewer_preference_patterns'] {
64
- const patterns: ReviewSummary['核心摘要']['reviewer_preference_patterns'] = [];
65
-
66
- // Common reviewer preference keywords
67
- const prefKeywords = [
68
- 'should always', 'must be', 'avoid', 'prefer', 'recommend',
69
- 'never', 'always', 'consider', 'take care', '注意',
70
- ];
71
-
72
- const sentences = conversationText.split(/[.!?]/);
73
- const prefCounts: Record<string, number> = {};
74
-
75
- for (const sentence of sentences) {
76
- const lower = sentence.toLowerCase();
77
- for (const keyword of prefKeywords) {
78
- if (lower.includes(keyword)) {
79
- const normalized = sentence.trim().slice(0, 50);
80
- prefCounts[normalized] = (prefCounts[normalized] || 0) + 1;
81
- }
82
- }
83
- }
84
-
85
- for (const [pattern, count] of Object.entries(prefCounts)) {
86
- if (count >= 2) {
87
- patterns.push({ pattern, frequency: count });
88
- }
89
- }
90
-
91
- return patterns;
92
- }
93
-
94
- function buildSummary(input: {
95
- sessionId: string;
96
- gate: number;
97
- conversationText: string;
98
- relatedSessions?: Array<{ sessionId: string; reason: string; relevance: number }>;
99
- }): ReviewSummary {
100
- return {
101
- session_id: input.sessionId,
102
- work_type: 'review',
103
- created_at: new Date().toISOString(),
104
- gate_at_session: input.gate,
105
- '关联上下文': input.relatedSessions || [],
106
- '核心摘要': {
107
- verdict: extractVerdict(input.conversationText),
108
- reviewed_artifact: '',
109
- blocking_issues: extractBlockingIssues(input.conversationText),
110
- non_blocking_observations: [],
111
- reviewer_preference_patterns: extractPreferencePatterns(input.conversationText),
112
- },
113
- '决策缺口': [],
114
- '风险点': [],
115
- '遗迹': [],
116
- };
117
- }
118
-
119
- export { buildSummary, type ReviewSummary };
120
-
121
- if (require.main === module) {
122
- const args = process.argv.slice(2);
123
- if (args.length < 2) {
124
- console.error('Usage: review_extractor.ts <session_id> <gate> [conversation_file]');
125
- process.exit(1);
126
- }
127
-
128
- const [sessionId, gate] = args;
129
- const fs = require('fs');
130
- const conversationText = args[2]
131
- ? fs.readFileSync(args[2], 'utf-8')
132
- : fs.readFileSync('/dev/stdin', 'utf-8');
133
-
134
- const summary = buildSummary({ sessionId, gate: parseInt(gate, 10), conversationText });
135
- console.log(JSON.stringify(summary, null, 2));
136
- }
@@ -1,93 +0,0 @@
1
- ---
2
- name: crystal-learn
3
- description: 结晶学习 — 自省与进化。提取结构性失败模式,形成不变量(invariant),并把它们注入执行层 skill。
4
- status: active
5
- tier: meta
6
- owner: {{PROJECT_OWNER}}
7
- last_audited: 2026-04-09
8
- triggers:
9
- - PLAN / ISSUE / transcript 复盘
10
- - 多 agent 失误复发
11
- - skill 自审
12
- outputs:
13
- - invariant delta
14
- - target injection map
15
- truth_policy:
16
- - 不变量正文留在 invariants/ 子目录,不在执行层重复长篇理论
17
- - 只有跨计划验证过的模式才升级为已确认 invariant
18
- - 已确认 invariant 必须映射到 active target skill
19
- ---
20
-
21
- # 结晶学习
22
-
23
- ## 我是谁
24
-
25
- 我是 harness 的适应性免疫系统。我不修具体 bug,也不写产品代码。我提取"这类错误为什么总会回来",把它们压成少量**不变量(invariant)**,然后注入到会被日常加载的执行 skill。
26
-
27
- 不变量不是风格建议,是**事后被证明违反即出事**的结构约束。一条真的不变量应该满足:违反它一次,可能没事;违反它三次,一定出事;而且所有三次的现场看起来完全不同。
28
-
29
- ## 工作对象
30
-
31
- 输入优先级:
32
-
33
- 1. PLAN / REVIEW / ISSUE 中的偏差记录
34
- 2. transcript 中的认知转折点
35
- 3. 多 agent 并行中的接缝事故
36
- 4. 守护工具自身的漂移
37
-
38
- 完整不变量正文与实例保留在 `invariants/` 子目录。
39
-
40
- ## 升级规则
41
-
42
- 一个模式只有在满足以下条件后才算**已确认 invariant**:
43
-
44
- - 不是单点 bug,而是结构性偏差
45
- - 至少在两个独立案例中出现,或在一个案例中呈现清晰的系统性形状
46
- - 能转换成跨场景可迁移的行动指令
47
- - 能映射到至少一个 active skill
48
-
49
- 没有到这个门槛的叫**候选模式**,记录在 `invariants/` 的 candidate 段落,不进入 target injection map。
50
-
51
- ## 注入执行层
52
-
53
- 我的硬契约不是"提取教训",而是"让教训改变执行 skill"。只写在 memory / reference 里的教训等于没提取——下一次 agent 不会去读。
54
-
55
- 注入规则:
56
-
57
- - 注入到**最可能违反它的 skill**,不一定是写代码的 skill
58
- - 执行层只保留 3-5 行行动指令("当 X 发生时,做 Y")
59
- - `invariants/` 保留完整理论和案例
60
- - target skill 更新后,`last_audited` 必须刷新
61
-
62
- ## 当前注入地图
63
-
64
- | Invariant | 名称 | 正文 | Target skills |
65
- |-----------|------|------|---------------|
66
- | `INV-0` | 快照幻觉 | `invariants/INV-0.md` | `harness-eng` |
67
- | `INV-0b` | 合并幻觉 | `invariants/INV-0b.md` | `harness-eng` |
68
- | `INV-1` | 波纹衰减 | `invariants/INV-1.md` | `harness-dev` |
69
- | `INV-2` | 格式断崖 | `invariants/INV-2.md` | `harness-dev`, `harness-ops` |
70
- | `INV-3` | 并发写入 | `invariants/INV-3.md` | `harness-eng` |
71
- | `INV-4` | 真相源分裂 | `invariants/INV-4.md` | `harness-ops`, `lead`, `harness-eng-test` |
72
- | `INV-5` | 语义搭便车 | `invariants/INV-5.md` | `harness-dev` |
73
- | `INV-6` | 验证衰减 | `invariants/INV-6.md` | `lead`, `harness-eng-test` |
74
- | `INV-7` | 无主接缝 | `invariants/INV-7.md` | `task-arch`, `plan-lock`, `lead` |
75
-
76
- ## Output Contract
77
-
78
- 每次使用我,默认给:
79
-
80
- 1. `invariant delta`
81
- - 新确认了什么
82
- - 哪条只是候选
83
- - 哪条只是新增实例
84
- 2. `target injection map`
85
- - 目标 skill
86
- - 需要注入的行动指令
87
- - 为什么放在那里
88
-
89
- ## 不做什么
90
-
91
- - 不把 `invariants/` 当执行文档(它太厚,日常加载会污染执行 skill 的上下文预算)
92
- - 不把一次性修复误判成 invariant(一次不算,两次是巧合,三次才是结构)
93
- - 不接受"记住这个教训就好"作为闭环——必须落到某个 target skill 的可执行指令
@@ -1,34 +0,0 @@
1
- # INV-0 快照幻觉 (Snapshot Hallucination)
2
-
3
- **分类**: 已确认 invariant
4
- **Target skill**: `harness-eng`
5
-
6
- ## 模式定义
7
-
8
- Agent 在做并行编排或计划时,使用"某个时间点拍下的代码快照"作为决策依据——但执行发生在快照之后,仓库已漂移,快照中提到的文件/函数/签名可能已不存在。
9
-
10
- 决策发生在 T0,执行发生在 T1,两者之间的代码变更被 agent 当成不存在。
11
-
12
- ## 典型形状
13
-
14
- - "我看到 `module/foo.ts` 里有 `Handler.process()`,WP-03 改这个函数即可"——实际 `process` 已改名为 `handle_request`。
15
- - "刚才 grep 过 5 个调用方"——实际 grep 是半小时前的结果,其间有两个新增调用方。
16
- - 多个 WP 引用同一份"现状分析文档",但文档本身从未被更新。
17
-
18
- ## 检测信号
19
-
20
- - 计划文档里的文件名/函数名在当前仓库 grep 不到
21
- - 同一次会话中多次引用"刚才看过的状态"而没有重新 Read
22
- - task-arch 阶段产生的 WP 清单与 Gate 7 实际执行时的文件状态不符
23
-
24
- ## 缓解动作
25
-
26
- **注入到 `harness-eng`**:
27
-
28
- 1. 任何跨 WP 的代码引用必须在**执行时刻**重新 Read,不能依赖 plan 阶段的 grep 结果。
29
- 2. 计划文档的"现状快照"段落必须标注 `snapshot_at: <commit sha>`;当前 HEAD 与该 sha 不同时,agent 必须重跑快照。
30
- 3. 多 WP 并行时,第二个 WP 开始前必须 `git status` 对齐。
31
-
32
- ## 实例池
33
-
34
- (案例留空,由后续 PLAN 复盘填充。模式本身已在上游 harness 的多个并行实验中独立出现至少三次,满足升级门槛。)
@@ -1,34 +0,0 @@
1
- # INV-1 波纹衰减 (Ripple Decay)
2
-
3
- **分类**: 已确认 invariant
4
- **Target skill**: `harness-dev`
5
-
6
- ## 模式定义
7
-
8
- 一个改动从源头发出时是"强波纹"——开发者清楚它会影响 A/B/C 三个下游。随着改动沿调用链向外传播,agent 对"这里还要不要改"的意识逐层衰减;传到第四层时,改动已被遗忘,该层保留着旧语义。
9
-
10
- 核心反差:**agent 改动源头时很清醒,传播时很健忘**。
11
-
12
- ## 典型形状
13
-
14
- - 改了某个字段的序列化格式,改了直接调用方,但漏了通过消息队列异步消费的下游。
15
- - 改了 API 请求 schema,改了 handler,但漏了 OpenAPI 文档 / 前端类型定义 / 集成测试 fixture。
16
- - 改了某个默认值,但配置迁移脚本里还写着旧值作为"兜底"。
17
-
18
- ## 检测信号
19
-
20
- - 改动 commit 只触及 2-3 个文件,但函数/字段被 10+ 处引用
21
- - 某层下游的测试在改动后仍 pass(可疑——应该要么被更新要么至少失败)
22
- - 修完一个 bug 后几天又出现"新"的同形状 bug
23
-
24
- ## 缓解动作
25
-
26
- **注入到 `harness-dev`**:
27
-
28
- 1. 任何契约类改动(API / schema / event / 配置项)必须先跑**全量消费方 grep**,列出 N 个位置,对每个位置显式打 "改 / 不改 + 原因" 标签。
29
- 2. "不改 + 原因"的位置数 > 0 时,原因必须写在 PR 描述里,供审查核验。
30
- 3. Agent 在 diff 只涉及 1-2 个文件时要警惕:"是真的就这 2 处,还是我漏看了消费方?"
31
-
32
- ## 与 INV-4 的关系
33
-
34
- INV-4(真相源分裂)是"同一事实被写在多处"的**存量**问题;INV-1 是"一次改动未传播到全部消费方"的**流量**问题。实际上 INV-4 很多时候是 INV-1 积累出来的——每次都漏一个下游,下游就变成新的事实副本。
@@ -1,35 +0,0 @@
1
- # INV-2 格式断崖 (Format Cliff)
2
-
3
- **分类**: 已确认 invariant
4
- **Target skills**: `harness-dev`, `harness-ops`
5
-
6
- ## 模式定义
7
-
8
- Agent 在拼接/转换数据时,假设上游输出是"结构化的"(dict / JSON / YAML),但上游实际输出是"近似结构化的字符串"——大多数时候能用 `JSON.parse()` 解析成功,某些 edge case 时解析失败。成功路径运行了 99 次,失败的第 100 次产生一个看起来与任何代码无关的崩溃。
9
-
10
- 命名"断崖"是因为:99% 的输入落在平地上,1% 的输入落下悬崖,中间没有坡。
11
-
12
- ## 典型形状
13
-
14
- - LLM 输出"JSON",但偶尔包含未转义的内部引号
15
- - 日志行被当作 TSV 解析,但某个字段里偶尔出现制表符
16
- - 配置文件被当作 YAML 解析,但某次手动编辑引入了一个 tab 缩进
17
- - CSV 中偶尔有字段包含换行或逗号
18
-
19
- ## 检测信号
20
-
21
- - 错误日志里出现极低频率的 `JSONDecodeError` / `YAMLParseError` 但没人修
22
- - "大多数时候没问题"成为某个路径的维护状态
23
- - 有 try/except 吞掉解析错误然后走降级分支——降级分支从未被测试
24
-
25
- ## 缓解动作
26
-
27
- **注入到 `harness-dev`**:
28
-
29
- 1. 任何"解析字符串→结构"的边界必须有**显式的 schema 验证**(zod / jsonschema / 自写的 assert),而不是 `JSON.parse()` 就过。
30
- 2. 解析失败不得静默降级。降级路径必须有明确的触发条件和可观测信号。
31
- 3. LLM 输出 parsing 走 strict mode(失败 → 重试或显错),不做"尽力而为"。
32
-
33
- **注入到 `harness-ops`**:
34
-
35
- 4. 日志/配置/数据文件的 schema 一旦定义,变更前必须过 INV-4 门禁——格式演进是真相源分裂的常见温床。
@@ -1,34 +0,0 @@
1
- # INV-3 并发写入 (Concurrent Write)
2
-
3
- **分类**: 已确认 invariant
4
- **Target skill**: `harness-eng`
5
-
6
- ## 模式定义
7
-
8
- 多个并行 WP(或多个并行 agent)对同一个文件/资源/共享状态写入,没有显式的写入 owner 或锁,结果是最后一个写入者覆盖前面所有人的工作——前面的工作**没有报错**,只是消失了。
9
-
10
- 这是"静默数据丢失"的典型形态。CI 绿、测试过、git 历史干净,但某个 WP 的成果不见了。
11
-
12
- ## 典型形状
13
-
14
- - 两个并行 agent 都往 MEMORY.md 追加内容,后写的覆盖了先写的整个文件(不是 append,是重写)
15
- - 并行 WP 各自更新 `settings.json`,后一个用完整的文件 Write 而不是 Edit,吞掉前一个的字段
16
- - 两个 track 都 regenerate 了同一个 auto-generated 文件,后 regenerate 的版本缺少前一个 track 的输入
17
-
18
- ## 检测信号
19
-
20
- - `git log --follow <file>` 显示同一文件在短时间内被多次完整重写
21
- - 某个 WP 的 LOG 说"已写入字段 X",但最终文件里没有 X
22
- - 并行 track 的 parallel_contract 里 write_set 有重叠但未指定 seam_owner
23
-
24
- ## 缓解动作
25
-
26
- **注入到 `harness-eng`**:
27
-
28
- 1. `parallel_contract.write_set` 必须不相交。相交的文件必须提升成 seam,并指定 seam_owner 做单点写入。
29
- 2. 共享状态文件(MEMORY.md / settings.json / MANIFEST.yaml)的并发写入一律通过 seam_owner 串行化,不允许并行 track 直接触碰。
30
- 3. 禁止 agent 用 `Write` 工具覆盖文件去做"追加"——追加必须用 `Edit` 或 `cat >>`,保证读后写。
31
-
32
- ## 与 INV-7 的关系
33
-
34
- INV-3 是无主接缝(INV-7)在"文件写入"维度的具体后果。INV-7 在计划阶段拦,INV-3 在执行阶段兜底。两层都失守才会出事。