onto-mcp 0.3.2 → 0.4.0

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 (300) hide show
  1. package/.onto/processes/reconstruct/actionable-ontology-seed-recomposition-design.md +447 -0
  2. package/.onto/processes/reconstruct/foundry-style-ontology-seed-contract.md +934 -0
  3. package/.onto/processes/reconstruct/reconstruct-boundary-contract.md +303 -725
  4. package/.onto/processes/reconstruct/reconstruct-contract-registry.yaml +1645 -0
  5. package/.onto/processes/reconstruct/reconstruct-execution-ux-contract.md +26 -22
  6. package/.onto/processes/reconstruct/source-profile-contract.md +49 -23
  7. package/.onto/processes/reconstruct/source-profiles/code.md +6 -3
  8. package/.onto/processes/reconstruct/source-profiles/database.md +5 -2
  9. package/.onto/processes/reconstruct/source-profiles/document.md +5 -2
  10. package/.onto/processes/reconstruct/source-profiles/spreadsheet.md +5 -4
  11. package/.onto/processes/review/review-execution-ux-contract.md +40 -0
  12. package/.onto/processes/shared/pipeline-execution-ledger-contract.md +26 -10
  13. package/.onto/processes/shared/target-material-kind-contract.md +29 -16
  14. package/AGENTS.md +6 -4
  15. package/README.md +135 -76
  16. package/dist/cli.js +8 -8
  17. package/dist/core-api/reconstruct-api.js +117 -31
  18. package/dist/core-api/review-api.js +47 -0
  19. package/dist/core-runtime/cli/codex-review-unit-executor.js +39 -2
  20. package/dist/core-runtime/cli/complete-review-session.js +2 -2
  21. package/dist/core-runtime/cli/mock-review-unit-executor.js +1 -1
  22. package/dist/core-runtime/cli/review-invoke.js +9 -9
  23. package/dist/core-runtime/cli/run-review-prompt-execution.js +39 -5
  24. package/dist/core-runtime/cli/spawn-watcher.js +266 -47
  25. package/dist/core-runtime/cli/start-review-session.js +3 -3
  26. package/dist/core-runtime/llm/llm-caller.js +11 -0
  27. package/dist/core-runtime/llm/llm-tool-loop.js +2 -0
  28. package/dist/core-runtime/observability/runtime-stream-observation.js +118 -0
  29. package/dist/core-runtime/onboard/cli-host.js +149 -0
  30. package/dist/core-runtime/onboard/host-target.js +22 -0
  31. package/dist/core-runtime/onboard/json-config-host.js +122 -0
  32. package/dist/core-runtime/onboard/path-scan.js +26 -0
  33. package/dist/core-runtime/onboard/prompt.js +51 -0
  34. package/dist/core-runtime/onboard/register.js +207 -0
  35. package/dist/core-runtime/onboard/types.js +27 -0
  36. package/dist/core-runtime/reconstruct/actionable-seed-validation.js +1777 -0
  37. package/dist/core-runtime/reconstruct/artifact-types.js +10 -4
  38. package/dist/core-runtime/reconstruct/contract-registry.js +623 -0
  39. package/dist/core-runtime/reconstruct/domain-id.js +10 -0
  40. package/dist/core-runtime/reconstruct/governing-snapshot.js +716 -0
  41. package/dist/core-runtime/reconstruct/material-profile-validation.js +191 -0
  42. package/dist/core-runtime/reconstruct/materialize-preparation.js +49 -11
  43. package/dist/core-runtime/reconstruct/pipeline-execution-ledger.js +269 -79
  44. package/dist/core-runtime/reconstruct/post-seed-validation.js +1194 -51
  45. package/dist/core-runtime/reconstruct/record.js +104 -20
  46. package/dist/core-runtime/reconstruct/run.js +2107 -413
  47. package/dist/core-runtime/reconstruct/seed-claim-projections.js +268 -0
  48. package/dist/core-runtime/reconstruct/source-profiles.js +93 -4
  49. package/dist/core-runtime/reconstruct/terminal-validation.js +807 -0
  50. package/dist/core-runtime/review/review-invocation-runner.js +4 -4
  51. package/dist/mcp/server.js +110 -38
  52. package/dist/mcp/tool-schemas.js +20 -6
  53. package/package.json +8 -17
  54. package/scripts/onto-review-watch.sh +486 -0
  55. package/scripts/onto-runtime-watch.sh +122 -0
  56. package/scripts/postinstall-hint.js +22 -0
  57. package/.onto/processes/reconstruct/top-level-concept-discovery-contract.md +0 -387
  58. package/dist/core-runtime/cli/bootstrap-review-binding.js +0 -186
  59. package/dist/core-runtime/cli/codex-nested-dispatch.test.js +0 -390
  60. package/dist/core-runtime/cli/codex-nested-teamlead-executor.test.js +0 -335
  61. package/dist/core-runtime/cli/coordinator-helpers.js +0 -583
  62. package/dist/core-runtime/cli/coordinator-state-machine-deliberation.test.js +0 -167
  63. package/dist/core-runtime/cli/coordinator-state-machine.js +0 -794
  64. package/dist/core-runtime/cli/e2e-codex-multi-agent-fixes.test.js +0 -615
  65. package/dist/core-runtime/cli/e2e-start-review-session.test.js +0 -312
  66. package/dist/core-runtime/cli/health.js +0 -44
  67. package/dist/core-runtime/cli/inline-http-review-unit-executor.test.js +0 -567
  68. package/dist/core-runtime/cli/materialize-review-execution-preparation.js +0 -104
  69. package/dist/core-runtime/cli/migrate-session-roots.js +0 -118
  70. package/dist/core-runtime/cli/repo-layout-migration-replace.smoke.test.js +0 -106
  71. package/dist/core-runtime/cli/review-invoke-auto-resolution.test.js +0 -268
  72. package/dist/core-runtime/cli/review-invoke-coordinator-topology.test.js +0 -136
  73. package/dist/core-runtime/cli/review-invoke-resolver-caching.test.js +0 -201
  74. package/dist/core-runtime/cli/review-invoke-topology-dispatch.test.js +0 -192
  75. package/dist/core-runtime/cli/session-root-guard.js +0 -168
  76. package/dist/core-runtime/cli/spawn-watcher.test.js +0 -457
  77. package/dist/core-runtime/cli/strip-wrapping-code-fence.test.js +0 -79
  78. package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.js +0 -412
  79. package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.test.js +0 -351
  80. package/dist/core-runtime/cli/topology-executor-mapping.js +0 -139
  81. package/dist/core-runtime/cli/topology-executor-mapping.test.js +0 -173
  82. package/dist/core-runtime/cli/write-review-interpretation.js +0 -81
  83. package/dist/core-runtime/config/onto-config-cli.js +0 -278
  84. package/dist/core-runtime/config/onto-config-key-path.js +0 -288
  85. package/dist/core-runtime/config/onto-config-key-path.test.js +0 -195
  86. package/dist/core-runtime/config/onto-config-preview.js +0 -108
  87. package/dist/core-runtime/config/onto-config-preview.test.js +0 -132
  88. package/dist/core-runtime/discovery/config-chain.js +0 -118
  89. package/dist/core-runtime/discovery/config-chain.test.js +0 -103
  90. package/dist/core-runtime/discovery/config-profile.js +0 -199
  91. package/dist/core-runtime/discovery/config-profile.test.js +0 -233
  92. package/dist/core-runtime/discovery/host-detection.test.js +0 -186
  93. package/dist/core-runtime/discovery/installation-paths.test.js +0 -65
  94. package/dist/core-runtime/discovery/lens-registry.test.js +0 -81
  95. package/dist/core-runtime/discovery/path-normalization.test.js +0 -22
  96. package/dist/core-runtime/discovery/plugin-path.js +0 -72
  97. package/dist/core-runtime/discovery/plugin-path.test.js +0 -95
  98. package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.js +0 -344
  99. package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.test.js +0 -915
  100. package/dist/core-runtime/evolve/adapters/code-product/compile/compile.js +0 -564
  101. package/dist/core-runtime/evolve/adapters/code-product/compile/compile.test.js +0 -708
  102. package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.js +0 -165
  103. package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.test.js +0 -227
  104. package/dist/core-runtime/evolve/adapters/code-product/validators/validate.js +0 -59
  105. package/dist/core-runtime/evolve/adapters/code-product/validators/validate.test.js +0 -205
  106. package/dist/core-runtime/evolve/adapters/methodology/adapter.js +0 -16
  107. package/dist/core-runtime/evolve/adapters/methodology/adapter.test.js +0 -9
  108. package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.js +0 -298
  109. package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.test.js +0 -70
  110. package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.js +0 -46
  111. package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.test.js +0 -73
  112. package/dist/core-runtime/evolve/adapters/registry.js +0 -47
  113. package/dist/core-runtime/evolve/adapters/registry.test.js +0 -67
  114. package/dist/core-runtime/evolve/cli.js +0 -256
  115. package/dist/core-runtime/evolve/commands/align.js +0 -194
  116. package/dist/core-runtime/evolve/commands/align.test.js +0 -82
  117. package/dist/core-runtime/evolve/commands/apply.js +0 -161
  118. package/dist/core-runtime/evolve/commands/apply.test.js +0 -138
  119. package/dist/core-runtime/evolve/commands/close.js +0 -39
  120. package/dist/core-runtime/evolve/commands/close.test.js +0 -99
  121. package/dist/core-runtime/evolve/commands/defer.js +0 -40
  122. package/dist/core-runtime/evolve/commands/defer.test.js +0 -134
  123. package/dist/core-runtime/evolve/commands/draft.js +0 -323
  124. package/dist/core-runtime/evolve/commands/draft.test.js +0 -178
  125. package/dist/core-runtime/evolve/commands/e2e-evolve-full-cycle.test.js +0 -208
  126. package/dist/core-runtime/evolve/commands/error-messages.js +0 -125
  127. package/dist/core-runtime/evolve/commands/error-messages.test.js +0 -167
  128. package/dist/core-runtime/evolve/commands/propose-align.js +0 -222
  129. package/dist/core-runtime/evolve/commands/propose-align.test.js +0 -136
  130. package/dist/core-runtime/evolve/commands/reconstruct.js +0 -330
  131. package/dist/core-runtime/evolve/commands/reconstruct.test.js +0 -278
  132. package/dist/core-runtime/evolve/commands/shared.js +0 -22
  133. package/dist/core-runtime/evolve/commands/stale-check.js +0 -103
  134. package/dist/core-runtime/evolve/commands/stale-check.test.js +0 -84
  135. package/dist/core-runtime/evolve/commands/start.js +0 -887
  136. package/dist/core-runtime/evolve/commands/start.test.js +0 -396
  137. package/dist/core-runtime/evolve/config/project-config.js +0 -99
  138. package/dist/core-runtime/evolve/config/project-config.test.js +0 -170
  139. package/dist/core-runtime/evolve/renderers/align-packet.js +0 -280
  140. package/dist/core-runtime/evolve/renderers/align-packet.test.js +0 -332
  141. package/dist/core-runtime/evolve/renderers/draft-packet.js +0 -303
  142. package/dist/core-runtime/evolve/renderers/draft-packet.test.js +0 -377
  143. package/dist/core-runtime/evolve/renderers/format.js +0 -5
  144. package/dist/core-runtime/evolve/renderers/scope-md.js +0 -237
  145. package/dist/core-runtime/evolve/renderers/scope-md.test.js +0 -306
  146. package/dist/core-runtime/govern/cli.js +0 -369
  147. package/dist/core-runtime/govern/cli.test.js +0 -314
  148. package/dist/core-runtime/govern/drift-engine.js +0 -103
  149. package/dist/core-runtime/govern/drift-engine.test.js +0 -319
  150. package/dist/core-runtime/govern/promote-principle.js +0 -206
  151. package/dist/core-runtime/govern/promote-principle.test.js +0 -368
  152. package/dist/core-runtime/govern/queue.js +0 -81
  153. package/dist/core-runtime/govern/types.js +0 -16
  154. package/dist/core-runtime/install/cli.js +0 -530
  155. package/dist/core-runtime/install/detect.js +0 -128
  156. package/dist/core-runtime/install/detect.test.js +0 -155
  157. package/dist/core-runtime/install/gitignore-update.js +0 -74
  158. package/dist/core-runtime/install/gitignore-update.test.js +0 -64
  159. package/dist/core-runtime/install/install-integration.test.js +0 -373
  160. package/dist/core-runtime/install/prompts.js +0 -389
  161. package/dist/core-runtime/install/prompts.test.js +0 -293
  162. package/dist/core-runtime/install/types.js +0 -26
  163. package/dist/core-runtime/install/validation.js +0 -295
  164. package/dist/core-runtime/install/validation.test.js +0 -313
  165. package/dist/core-runtime/install/writer.js +0 -254
  166. package/dist/core-runtime/install/writer.test.js +0 -218
  167. package/dist/core-runtime/learning/extractor.js +0 -461
  168. package/dist/core-runtime/learning/feedback.js +0 -179
  169. package/dist/core-runtime/learning/health-report.js +0 -165
  170. package/dist/core-runtime/learning/health-report.test.js +0 -169
  171. package/dist/core-runtime/learning/loader.js +0 -388
  172. package/dist/core-runtime/learning/loader.test.js +0 -102
  173. package/dist/core-runtime/learning/promote/apply-state.js +0 -240
  174. package/dist/core-runtime/learning/promote/audit-obligation.js +0 -195
  175. package/dist/core-runtime/learning/promote/collector.js +0 -432
  176. package/dist/core-runtime/learning/promote/degraded-state.js +0 -125
  177. package/dist/core-runtime/learning/promote/domain-doc-proposer.js +0 -166
  178. package/dist/core-runtime/learning/promote/e2e-promote.test.js +0 -6385
  179. package/dist/core-runtime/learning/promote/health-snapshot.js +0 -150
  180. package/dist/core-runtime/learning/promote/insight-reclassifier.js +0 -544
  181. package/dist/core-runtime/learning/promote/judgment-auditor.js +0 -517
  182. package/dist/core-runtime/learning/promote/panel-reviewer.js +0 -1158
  183. package/dist/core-runtime/learning/promote/promote-executor.js +0 -1675
  184. package/dist/core-runtime/learning/promote/promoter.js +0 -307
  185. package/dist/core-runtime/learning/promote/retirement.js +0 -122
  186. package/dist/core-runtime/learning/promote/types.js +0 -23
  187. package/dist/core-runtime/learning/prompt-sections.js +0 -51
  188. package/dist/core-runtime/learning/shared/artifact-registry-init.js +0 -45
  189. package/dist/core-runtime/learning/shared/artifact-registry.js +0 -254
  190. package/dist/core-runtime/learning/shared/audit-obligation-kernel.js +0 -73
  191. package/dist/core-runtime/learning/shared/audit-state.js +0 -99
  192. package/dist/core-runtime/learning/shared/duplicate-check.js +0 -28
  193. package/dist/core-runtime/learning/shared/llm-caller.js +0 -831
  194. package/dist/core-runtime/learning/shared/llm-caller.test.js +0 -601
  195. package/dist/core-runtime/learning/shared/llm-tool-loop.js +0 -393
  196. package/dist/core-runtime/learning/shared/mode.js +0 -25
  197. package/dist/core-runtime/learning/shared/paths.js +0 -84
  198. package/dist/core-runtime/learning/shared/paths.test.js +0 -79
  199. package/dist/core-runtime/learning/shared/patterns.js +0 -37
  200. package/dist/core-runtime/learning/shared/recoverability.js +0 -355
  201. package/dist/core-runtime/learning/shared/recovery-context.js +0 -374
  202. package/dist/core-runtime/learning/shared/scope.js +0 -1
  203. package/dist/core-runtime/learning/shared/semantic-classifier.js +0 -94
  204. package/dist/core-runtime/learning/shared/specs/apply-execution-state-spec.js +0 -42
  205. package/dist/core-runtime/learning/shared/specs/audit-state-spec.js +0 -37
  206. package/dist/core-runtime/learning/shared/specs/backup-metadata-spec.js +0 -39
  207. package/dist/core-runtime/learning/shared/specs/emergency-log-spec.js +0 -41
  208. package/dist/core-runtime/learning/shared/specs/layout-version-spec.js +0 -38
  209. package/dist/core-runtime/learning/shared/specs/promote-decisions-spec.js +0 -43
  210. package/dist/core-runtime/learning/shared/specs/promote-report-spec.js +0 -113
  211. package/dist/core-runtime/learning/shared/specs/prune-log-spec.js +0 -36
  212. package/dist/core-runtime/learning/shared/specs/recovery-resolution-spec.js +0 -48
  213. package/dist/core-runtime/learning/shared/specs/restore-manifest-spec.js +0 -43
  214. package/dist/core-runtime/learning/shared/specs/spec-helpers.js +0 -64
  215. package/dist/core-runtime/learning/usage-tracker.js +0 -190
  216. package/dist/core-runtime/learning/usage-tracker.test.js +0 -176
  217. package/dist/core-runtime/onboard/detect-review-axes.js +0 -122
  218. package/dist/core-runtime/onboard/detect-review-axes.test.js +0 -127
  219. package/dist/core-runtime/onboard/write-review-block.js +0 -188
  220. package/dist/core-runtime/onboard/write-review-block.test.js +0 -240
  221. package/dist/core-runtime/readers/brownfield-builder.js +0 -150
  222. package/dist/core-runtime/readers/brownfield-builder.test.js +0 -136
  223. package/dist/core-runtime/readers/code-chunk-collector.js +0 -53
  224. package/dist/core-runtime/readers/code-chunk-collector.test.js +0 -136
  225. package/dist/core-runtime/readers/file-utils.js +0 -240
  226. package/dist/core-runtime/readers/file-utils.test.js +0 -146
  227. package/dist/core-runtime/readers/lexicon-citation-check.js +0 -93
  228. package/dist/core-runtime/readers/lexicon-citation-check.test.js +0 -77
  229. package/dist/core-runtime/readers/mcp-figma.js +0 -30
  230. package/dist/core-runtime/readers/mcp-figma.test.js +0 -82
  231. package/dist/core-runtime/readers/mcp-generic.js +0 -31
  232. package/dist/core-runtime/readers/mcp-generic.test.js +0 -76
  233. package/dist/core-runtime/readers/ontology-index.js +0 -148
  234. package/dist/core-runtime/readers/ontology-index.test.js +0 -245
  235. package/dist/core-runtime/readers/ontology-query.js +0 -168
  236. package/dist/core-runtime/readers/ontology-query.test.js +0 -311
  237. package/dist/core-runtime/readers/ontology-resolve.js +0 -48
  238. package/dist/core-runtime/readers/ontology-resolve.test.js +0 -48
  239. package/dist/core-runtime/readers/patterns/index.js +0 -7
  240. package/dist/core-runtime/readers/review-log.js +0 -213
  241. package/dist/core-runtime/readers/review-log.test.js +0 -313
  242. package/dist/core-runtime/readers/scan-local.js +0 -102
  243. package/dist/core-runtime/readers/scan-local.test.js +0 -102
  244. package/dist/core-runtime/readers/scan-tarball.js +0 -121
  245. package/dist/core-runtime/readers/scan-tarball.test.js +0 -283
  246. package/dist/core-runtime/readers/scan-vault.js +0 -34
  247. package/dist/core-runtime/readers/scan-vault.test.js +0 -81
  248. package/dist/core-runtime/readers/types.js +0 -42
  249. package/dist/core-runtime/readers/types.test.js +0 -94
  250. package/dist/core-runtime/readers/viewpoint-collectors.js +0 -229
  251. package/dist/core-runtime/reconstruct/seed-candidate-validation.js +0 -385
  252. package/dist/core-runtime/review/citation-audit.test.js +0 -165
  253. package/dist/core-runtime/review/execution-plan-resolver.js +0 -247
  254. package/dist/core-runtime/review/execution-plan-resolver.test.js +0 -243
  255. package/dist/core-runtime/review/execution-topology-resolver-axis-first.test.js +0 -246
  256. package/dist/core-runtime/review/execution-topology-resolver.js +0 -401
  257. package/dist/core-runtime/review/execution-topology-resolver.test.js +0 -315
  258. package/dist/core-runtime/review/inline-context-embedder.test.js +0 -154
  259. package/dist/core-runtime/review/legacy-mode-policy.js +0 -88
  260. package/dist/core-runtime/review/materializers-effort-persist.test.js +0 -79
  261. package/dist/core-runtime/review/ontology-path-classifier.js +0 -179
  262. package/dist/core-runtime/review/ontology-path-classifier.test.js +0 -216
  263. package/dist/core-runtime/review/packet-boundary-policy.test.js +0 -107
  264. package/dist/core-runtime/review/participating-lens-paths.test.js +0 -73
  265. package/dist/core-runtime/review/review-config-legacy-translate.js +0 -244
  266. package/dist/core-runtime/review/review-config-legacy-translate.test.js +0 -161
  267. package/dist/core-runtime/review/review-config-validator.js +0 -289
  268. package/dist/core-runtime/review/review-config-validator.test.js +0 -236
  269. package/dist/core-runtime/review/shape-pipeline-audit.test.js +0 -311
  270. package/dist/core-runtime/review/shape-to-topology-id.js +0 -117
  271. package/dist/core-runtime/review/shape-to-topology-id.test.js +0 -132
  272. package/dist/core-runtime/review/topology-shape-derivation.js +0 -155
  273. package/dist/core-runtime/review/topology-shape-derivation.test.js +0 -195
  274. package/dist/core-runtime/scope-runtime/constants.js +0 -12
  275. package/dist/core-runtime/scope-runtime/constraint-pool.js +0 -166
  276. package/dist/core-runtime/scope-runtime/constraint-pool.test.js +0 -674
  277. package/dist/core-runtime/scope-runtime/domain-validation-log.js +0 -135
  278. package/dist/core-runtime/scope-runtime/domain-validation-log.test.js +0 -156
  279. package/dist/core-runtime/scope-runtime/eval-persistence.js +0 -65
  280. package/dist/core-runtime/scope-runtime/eval-persistence.test.js +0 -84
  281. package/dist/core-runtime/scope-runtime/event-pipeline.js +0 -64
  282. package/dist/core-runtime/scope-runtime/event-pipeline.test.js +0 -450
  283. package/dist/core-runtime/scope-runtime/event-store.js +0 -39
  284. package/dist/core-runtime/scope-runtime/event-store.test.js +0 -95
  285. package/dist/core-runtime/scope-runtime/gate-guard.js +0 -348
  286. package/dist/core-runtime/scope-runtime/gate-guard.test.js +0 -1047
  287. package/dist/core-runtime/scope-runtime/hash.js +0 -4
  288. package/dist/core-runtime/scope-runtime/hash.test.js +0 -33
  289. package/dist/core-runtime/scope-runtime/id.js +0 -4
  290. package/dist/core-runtime/scope-runtime/id.test.js +0 -17
  291. package/dist/core-runtime/scope-runtime/reducer.js +0 -297
  292. package/dist/core-runtime/scope-runtime/reducer.test.js +0 -759
  293. package/dist/core-runtime/scope-runtime/scope-manager.js +0 -161
  294. package/dist/core-runtime/scope-runtime/state-machine.js +0 -309
  295. package/dist/core-runtime/scope-runtime/state-machine.test.js +0 -704
  296. package/dist/core-runtime/scope-runtime/types.js +0 -116
  297. package/dist/core-runtime/scope-runtime/types.test.js +0 -69
  298. package/dist/core-runtime/translate/render-for-user.js +0 -169
  299. package/dist/core-runtime/translate/render-for-user.test.js +0 -122
  300. package/dist/providers/capability-contract.js +0 -1
@@ -1,303 +0,0 @@
1
- import { isPolicyChangeRequired } from "../../scope-runtime/types.js";
2
- import { findConstraint } from "../../scope-runtime/constraint-pool.js";
3
- import { formatPerspective } from "./format.js";
4
- /**
5
- * Render a Draft Packet — the document that presents deep constraint
6
- * discovery results and collects user decisions on each constraint.
7
- *
8
- * Pure function: (state, content) → string.
9
- *
10
- * - "처리하지 않으면" from pool.impact_if_ignored (single source).
11
- * - Summary table sorted: required → recommended, then CST-ID ascending.
12
- * - PO/Builder detail format determined by pool's decision_owner.
13
- * - Section 4 (Invalidated) auto-generated from pool; omitted if 0 items.
14
- * - Throws if constraint_id not in pool, or if detail targets an invalidated constraint.
15
- * - Section 2 "결정 필요 N건" canonical source = content.constraint_details (Section 3 실제 렌더 항목). status별 집계는 pool lookup.
16
- */
17
- export function renderDraftPacket(state, content) {
18
- validate(state, content);
19
- const lines = [];
20
- lines.push(`## Draft Packet: ${state.title}`);
21
- lines.push("");
22
- renderSurface(lines, state, content);
23
- renderStatus(lines, state, content);
24
- renderConstraints(lines, state, content);
25
- renderInvalidated(lines, state);
26
- renderGuardrails(lines, content);
27
- renderDecision(lines, state, content);
28
- return lines.join("\n");
29
- }
30
- // ─── Validation ───
31
- function validate(state, content) {
32
- const missingIds = content.constraint_details
33
- .map((d) => d.constraint_id)
34
- .filter((id) => findConstraint(state.constraint_pool, id) === undefined);
35
- if (missingIds.length > 0) {
36
- throw new Error(`renderDraftPacket: constraint_id not found in pool: ${missingIds.join(", ")}. constraint.discovered 이벤트로 해당 ID를 pool에 먼저 등록하세요.`);
37
- }
38
- for (const d of content.constraint_details) {
39
- const entry = findConstraint(state.constraint_pool, d.constraint_id);
40
- if (entry.decision_owner !== d.decision_owner) {
41
- const fix = entry.decision_owner === "builder"
42
- ? "ConstraintDetailBuilder 형식(builder_decision, builder_judgment)으로 변경하세요"
43
- : "ConstraintDetailPO 형식(options_table, recommendation)으로 변경하세요";
44
- throw new Error(`renderDraftPacket: decision_owner mismatch for ${d.constraint_id} — pool: "${entry.decision_owner}", content: "${d.decision_owner}". ${fix}`);
45
- }
46
- // W-B-09: constraint source 일치 가드 — pool에 source_refs가 없는 constraint reject
47
- if (!entry.source_refs || entry.source_refs.length === 0) {
48
- throw new Error(`renderDraftPacket: constraint ${d.constraint_id} has no source_refs in pool. constraint.discovered 이벤트에 source_refs를 포함하세요.`);
49
- }
50
- // invalidated constraint 는 Section 4(자동 생성)에서만 노출되어야 함. Section 3 detail로 들어오면 중복/모순 발생.
51
- if (entry.status === "invalidated") {
52
- throw new Error(`renderDraftPacket: constraint ${d.constraint_id} is invalidated — must not appear in constraint_details. Invalidated constraints are auto-rendered in Section 4.`);
53
- }
54
- }
55
- }
56
- // ─── Section 1: 확정된 Surface ───
57
- function renderSurface(lines, state, content) {
58
- lines.push("### 1. 확정된 Surface");
59
- lines.push("");
60
- lines.push(`- **scope type**: ${state.entry_mode}`);
61
- lines.push(`- **surface location**: \`${content.surface_path}\``);
62
- if (content.run_command) {
63
- lines.push(`- **실행 방법**: \`${content.run_command}\``);
64
- }
65
- if (content.mockup_revisions !== undefined) {
66
- lines.push(`- **mockup 반복**: ${content.mockup_revisions}회 수정 후 주체자 확정`);
67
- }
68
- lines.push("");
69
- if (content.scenario_guide.length > 0) {
70
- lines.push("**시나리오 가이드:**");
71
- lines.push("");
72
- lines.push("| 시나리오 | 시작 | 동작 순서 | 확인된 동작 |");
73
- lines.push("|---------|------|----------|------------|");
74
- for (const s of content.scenario_guide) {
75
- lines.push(`| ${s.scenario} | ${s.start} | ${s.steps} | ${s.confirmed} |`);
76
- }
77
- lines.push("");
78
- }
79
- lines.push("---");
80
- lines.push("");
81
- }
82
- // ─── Section 2: 현재까지의 결정 현황 (자동 생성) ───
83
- function renderStatus(lines, state, content) {
84
- lines.push("### 2. 현재까지의 결정 현황");
85
- lines.push("");
86
- // Align decisions
87
- const alignItems = [];
88
- if (state.direction)
89
- alignItems.push("방향 승인");
90
- if (state.scope_boundaries)
91
- alignItems.push("범위 확정");
92
- const groundingCSTs = state.constraint_pool.constraints
93
- .filter((c) => c.discovery_stage === "grounding")
94
- .map((c) => c.constraint_id);
95
- if (groundingCSTs.length > 0) {
96
- alignItems.push(`${groundingCSTs.join(", ")} 인지 완료`);
97
- }
98
- lines.push(`- Align에서 결정: ${alignItems.join(", ")}`);
99
- // Canonical source for Section 2 active count = content.constraint_details (Section 3에 실제로 렌더되는 항목들).
100
- // status별 집계는 pool에서 lookup — detail id set ∩ pool 의 status 합.
101
- const active = content.constraint_details.length;
102
- let decided = 0;
103
- let undecided = 0;
104
- let clarifyPending = 0;
105
- for (const d of content.constraint_details) {
106
- const entry = findConstraint(state.constraint_pool, d.constraint_id);
107
- if (entry.status === "decided")
108
- decided++;
109
- else if (entry.status === "clarify_pending")
110
- clarifyPending++;
111
- else
112
- undecided++;
113
- }
114
- lines.push(`- Draft에서 결정 필요: 아래 ${active}건 (${decided}건 결정 완료, ${undecided + clarifyPending}건 미결정)`);
115
- // Lock condition — clarify_pending은 pool.summary가 runtime 사실 source (Section 3 렌더와 독립적 gate).
116
- const poolClarify = state.constraint_pool.summary.clarify_pending;
117
- if (poolClarify > 0) {
118
- lines.push(`- 잠금 전 필수 해소: \`clarify\` 상태 항목이 ${poolClarify}건 있어 잠글 수 없음`);
119
- }
120
- else {
121
- lines.push("- 잠금 전 필수 해소: `clarify` 상태 항목이 있으면 잠글 수 없음");
122
- }
123
- lines.push("");
124
- lines.push("---");
125
- lines.push("");
126
- }
127
- // ─── Section 3: 결정이 필요한 항목 ───
128
- function renderConstraints(lines, state, content) {
129
- lines.push("### 3. 결정이 필요한 항목 — 확정된 mockup 기준");
130
- lines.push("");
131
- if (content.constraint_details.length === 0) {
132
- lines.push("발견된 제약이 없습니다.");
133
- lines.push("");
134
- lines.push("---");
135
- lines.push("");
136
- return;
137
- }
138
- // Sorted entries: required → recommended, then CST-ID
139
- const sorted = sortConstraintDetails(content.constraint_details, state);
140
- // Summary table
141
- lines.push("#### 요약");
142
- lines.push("");
143
- lines.push("| CST-ID | 관점 | 요약 | severity(중요도) |");
144
- lines.push("|--------|------|------|--------|");
145
- for (const d of sorted) {
146
- const entry = findConstraint(state.constraint_pool, d.constraint_id);
147
- const severityLabel = formatSeverity(entry, d);
148
- lines.push(`| ${d.constraint_id} | ${formatPerspective(entry.perspective)} | ${entry.summary} | ${severityLabel} |`);
149
- }
150
- lines.push("");
151
- lines.push("---");
152
- lines.push("");
153
- // Individual details
154
- for (const d of sorted) {
155
- const entry = findConstraint(state.constraint_pool, d.constraint_id);
156
- renderConstraintDetail(lines, d, entry);
157
- }
158
- }
159
- function renderConstraintDetail(lines, detail, entry) {
160
- const severityTag = entry.severity === "required" ? "필수" : "권장";
161
- const policyTag = isPolicyChangeRequired(entry) ? " [정책 변경 검토 필요]" : "";
162
- const ownerTag = detail.decision_owner === "builder" ? " (Builder 결정 항목)" : "";
163
- lines.push(`#### ${detail.constraint_id} | ${formatPerspective(entry.perspective)} | ${entry.summary} — ${severityTag}${policyTag}${ownerTag}`);
164
- lines.push("");
165
- lines.push(`**상황:** ${detail.situation}`);
166
- lines.push("");
167
- lines.push(`**처리하지 않으면:** ${entry.impact_if_ignored}`);
168
- lines.push("");
169
- if (isPolicyChangeRequired(entry)) {
170
- lines.push(`> **정책 변경 전제**: 이 항목은 기존 정책 변경을 전제합니다(requires_policy_change=true). inject 결정 시 구현 전 법무/정책 검토가 필요합니다.`);
171
- lines.push(`> 해소 경로: (1) evidence_updated 이벤트로 requires_policy_change=false 설정 (2) 정책 검토 완료 후 evidence_note에 근거 기록`);
172
- lines.push("");
173
- }
174
- if (detail.decision_owner === "product_owner") {
175
- // PO detail
176
- lines.push("**선택지:**");
177
- lines.push("");
178
- lines.push("| 선택 | 이점 | 내용 | 리스크 | 되돌림 비용 |");
179
- lines.push("|------|------|------|--------|------------|");
180
- for (const opt of detail.options_table) {
181
- lines.push(`| ${opt.choice} | ${opt.pros} | ${opt.description} | ${opt.risk} | ${opt.reversal_cost} |`);
182
- }
183
- lines.push("");
184
- lines.push(`추천: ${detail.recommendation}`);
185
- lines.push("");
186
- lines.push("선택: ___");
187
- }
188
- else {
189
- // Builder detail
190
- lines.push(`**Builder가 결정할 사항:** ${detail.builder_decision}`);
191
- lines.push("");
192
- lines.push(`**이 작업 관점에서의 판단:** ${detail.builder_judgment}`);
193
- lines.push("");
194
- if (detail.guardrail) {
195
- lines.push(`**guardrail:** ${detail.guardrail}`);
196
- lines.push("");
197
- lines.push("Builder 결정 예정 — 위 guardrail 확인 후 승인: ___");
198
- }
199
- else {
200
- lines.push("Builder 결정 예정 — 제품 관점 제약 조건 없음. 승인: ___");
201
- }
202
- }
203
- lines.push("");
204
- lines.push("---");
205
- lines.push("");
206
- }
207
- // ─── Section 4: 시스템이 제외한 항목 (자동, 조건부) ───
208
- function renderInvalidated(lines, state) {
209
- const invalidated = state.constraint_pool.constraints.filter((c) => c.status === "invalidated");
210
- if (invalidated.length === 0)
211
- return;
212
- lines.push("### 4. 시스템이 제외한 항목");
213
- lines.push("");
214
- lines.push("| CST-ID | 관점 | 요약 | 제외 사유 |");
215
- lines.push("|--------|------|------|----------|");
216
- for (const c of invalidated) {
217
- lines.push(`| ${c.constraint_id} | ${formatPerspective(c.perspective)} | ${c.summary} | ${c.invalidation_reason ?? ""} |`);
218
- }
219
- lines.push("");
220
- // Required severity warning
221
- const requiredInvalidated = invalidated.filter((c) => c.severity === "required");
222
- if (requiredInvalidated.length > 0) {
223
- for (const c of requiredInvalidated) {
224
- lines.push(`> **${c.constraint_id}**: 이 항목은 기능 불능 또는 규정 위반으로 분류되었습니다. 제외에 동의하시나요?`);
225
- }
226
- lines.push("");
227
- }
228
- lines.push("동의하지 않으면 해당 항목을 결정 목록으로 복원할 수 있습니다.");
229
- lines.push("");
230
- lines.push("---");
231
- lines.push("");
232
- }
233
- // ─── Section 5: 제약 조건 ───
234
- function renderGuardrails(lines, content) {
235
- lines.push("### 5. 제약 조건 (구현 시 반드시 지켜야 할 것)");
236
- lines.push("");
237
- if (content.guardrails.length === 0) {
238
- lines.push("없음");
239
- }
240
- else {
241
- for (const g of content.guardrails) {
242
- lines.push(`- ${g}`);
243
- }
244
- }
245
- lines.push("");
246
- lines.push("---");
247
- lines.push("");
248
- }
249
- // ─── Section 6: 지금 결정할 것 ───
250
- function renderDecision(lines, state, content) {
251
- lines.push("### 6. 지금 결정할 것");
252
- lines.push("");
253
- if (content.constraint_details.length === 0) {
254
- lines.push("발견된 제약이 없으므로, Approve만 선택하시면 됩니다.");
255
- lines.push("");
256
- lines.push("- **Approve**: 위 결정에 동의하며, compile 단계로 진행합니다. 각 CST에 대한 결정을 함께 제출해 주세요.");
257
- lines.push("- **Revise**: 피드백을 주시면 Draft Packet을 수정하여 다시 보여드립니다.");
258
- lines.push("- **Reject**: 이 scope를 거절하고 종료합니다.");
259
- lines.push("- **Redirect to Align**: 방향 자체를 재검토하기 위해 Align 단계로 돌아갑니다.");
260
- lines.push("- **Review**: 이 Packet 전체에 대해 6-Agent Panel Review를 요청합니다.");
261
- lines.push("");
262
- lines.push("선택: **Approve** / **Revise** / **Reject** / **Redirect to Align** / **Review**");
263
- }
264
- else {
265
- for (let i = 0; i < content.decision_questions.length; i++) {
266
- lines.push(`${i + 1}. ${content.decision_questions[i]}`);
267
- }
268
- lines.push("");
269
- if (state.constraint_pool.summary.clarify_pending > 0) {
270
- lines.push(`> \`clarify\`를 선택한 항목은 해소될 때까지 잠글 수 없습니다 (현재 ${state.constraint_pool.summary.clarify_pending}건)`);
271
- lines.push("");
272
- }
273
- lines.push("모든 결정이 완료되면 compile을 시작합니다.");
274
- lines.push("");
275
- lines.push("- **Approve**: 위 결정에 동의하며, compile 단계로 진행합니다. 각 CST에 대한 결정을 함께 제출해 주세요.");
276
- lines.push("- **Revise**: 피드백을 주시면 Draft Packet을 수정하여 다시 보여드립니다.");
277
- lines.push("- **Reject**: 이 scope를 거절하고 종료합니다.");
278
- lines.push("- **Redirect to Align**: 방향 자체를 재검토하기 위해 Align 단계로 돌아갑니다.");
279
- lines.push("- **Review**: 이 Packet 전체에 대해 6-Agent Panel Review를 요청합니다.");
280
- lines.push("");
281
- lines.push("선택: **Approve** + 각 CST 결정 / **Revise** / **Reject** / **Redirect to Align** / **Review**");
282
- }
283
- lines.push("");
284
- }
285
- // ─── Helpers ───
286
- function sortConstraintDetails(details, state) {
287
- return [...details].sort((a, b) => {
288
- const entryA = findConstraint(state.constraint_pool, a.constraint_id);
289
- const entryB = findConstraint(state.constraint_pool, b.constraint_id);
290
- // required first
291
- if (entryA.severity !== entryB.severity) {
292
- return entryA.severity === "required" ? -1 : 1;
293
- }
294
- // then CST-ID ascending
295
- return a.constraint_id.localeCompare(b.constraint_id);
296
- });
297
- }
298
- function formatSeverity(entry, detail) {
299
- const base = entry.severity === "required" ? "필수" : "권장";
300
- const suffix = detail.decision_owner === "builder" ? " (Builder 결정)" : "";
301
- return `${base}${suffix}`;
302
- }
303
- // formatPerspective is imported from ./format.ts