@principles/core 1.284.17 → 1.284.18

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 (291) hide show
  1. package/dist/runtime-v2/__tests__/artificer-runner-vslice.test.js +101 -14
  2. package/dist/runtime-v2/__tests__/artificer-runner-vslice.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/evidence-sanitizer.test.js +113 -1
  4. package/dist/runtime-v2/__tests__/evidence-sanitizer.test.js.map +1 -1
  5. package/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +0 -1
  6. package/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
  7. package/dist/runtime-v2/__tests__/scribe-runner-vslice.test.js +211 -0
  8. package/dist/runtime-v2/__tests__/scribe-runner-vslice.test.js.map +1 -1
  9. package/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter-message-file.test.js +23 -1
  10. package/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter-message-file.test.js.map +1 -1
  11. package/dist/runtime-v2/adapter/__tests__/principle-tree-ledger-adapter.test.js +25 -0
  12. package/dist/runtime-v2/adapter/__tests__/principle-tree-ledger-adapter.test.js.map +1 -1
  13. package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts.map +1 -1
  14. package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js +38 -7
  15. package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js.map +1 -1
  16. package/dist/runtime-v2/adapter/output-schema-registry.d.ts.map +1 -1
  17. package/dist/runtime-v2/adapter/output-schema-registry.js +0 -2
  18. package/dist/runtime-v2/adapter/output-schema-registry.js.map +1 -1
  19. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.d.ts +16 -0
  20. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.d.ts.map +1 -1
  21. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.js +22 -0
  22. package/dist/runtime-v2/adapter/principle-tree-ledger-adapter.js.map +1 -1
  23. package/dist/runtime-v2/agent-spec.d.ts +0 -1
  24. package/dist/runtime-v2/agent-spec.d.ts.map +1 -1
  25. package/dist/runtime-v2/agent-spec.js +3 -1
  26. package/dist/runtime-v2/agent-spec.js.map +1 -1
  27. package/dist/runtime-v2/config/__tests__/internal-agent-names.test.js +3 -1
  28. package/dist/runtime-v2/config/__tests__/internal-agent-names.test.js.map +1 -1
  29. package/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +0 -7
  30. package/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -1
  31. package/dist/runtime-v2/config/__tests__/pd-config-context-injection.test.js +0 -1
  32. package/dist/runtime-v2/config/__tests__/pd-config-context-injection.test.js.map +1 -1
  33. package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +0 -1
  34. package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
  35. package/dist/runtime-v2/config/__tests__/pd-config-principles.test.js +0 -1
  36. package/dist/runtime-v2/config/__tests__/pd-config-principles.test.js.map +1 -1
  37. package/dist/runtime-v2/config/__tests__/pd-config-reasoning.test.js +0 -1
  38. package/dist/runtime-v2/config/__tests__/pd-config-reasoning.test.js.map +1 -1
  39. package/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js +0 -1
  40. package/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js.map +1 -1
  41. package/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +61 -1
  42. package/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -1
  43. package/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
  44. package/dist/runtime-v2/config/pd-config-defaults.js +0 -1
  45. package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  46. package/dist/runtime-v2/config/pd-config-types.d.ts +1 -1
  47. package/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
  48. package/dist/runtime-v2/config/pd-config-types.js +0 -1
  49. package/dist/runtime-v2/config/pd-config-types.js.map +1 -1
  50. package/dist/runtime-v2/config/pd-config-validate.d.ts.map +1 -1
  51. package/dist/runtime-v2/config/pd-config-validate.js +20 -1
  52. package/dist/runtime-v2/config/pd-config-validate.js.map +1 -1
  53. package/dist/runtime-v2/evidence-sanitizer.d.ts +17 -2
  54. package/dist/runtime-v2/evidence-sanitizer.d.ts.map +1 -1
  55. package/dist/runtime-v2/evidence-sanitizer.js +80 -11
  56. package/dist/runtime-v2/evidence-sanitizer.js.map +1 -1
  57. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +3 -3
  58. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  59. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  60. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +11 -40
  61. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  62. package/dist/runtime-v2/feature-flags/feature-flag-lifecycle.d.ts.map +1 -1
  63. package/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js +6 -40
  64. package/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js.map +1 -1
  65. package/dist/runtime-v2/index.d.ts +9 -6
  66. package/dist/runtime-v2/index.d.ts.map +1 -1
  67. package/dist/runtime-v2/index.js +12 -5
  68. package/dist/runtime-v2/index.js.map +1 -1
  69. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +61 -29
  70. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
  71. package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +0 -1
  72. package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
  73. package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.js +2 -2
  74. package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.js.map +1 -1
  75. package/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.js +2 -13
  76. package/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.js.map +1 -1
  77. package/dist/runtime-v2/internalization/__tests__/evaluator-chinese-feedback-contract.test.js +1 -5
  78. package/dist/runtime-v2/internalization/__tests__/evaluator-chinese-feedback-contract.test.js.map +1 -1
  79. package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.js +1 -5
  80. package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.js.map +1 -1
  81. package/dist/runtime-v2/internalization/__tests__/external-review-p0-regressions.test.js +1 -1
  82. package/dist/runtime-v2/internalization/__tests__/external-review-p0-regressions.test.js.map +1 -1
  83. package/dist/runtime-v2/internalization/__tests__/formation-context.test.d.ts +2 -0
  84. package/dist/runtime-v2/internalization/__tests__/formation-context.test.d.ts.map +1 -0
  85. package/dist/runtime-v2/internalization/__tests__/formation-context.test.js +428 -0
  86. package/dist/runtime-v2/internalization/__tests__/formation-context.test.js.map +1 -0
  87. package/dist/runtime-v2/internalization/__tests__/scribe-prompt-builder.test.js +97 -0
  88. package/dist/runtime-v2/internalization/__tests__/scribe-prompt-builder.test.js.map +1 -1
  89. package/dist/runtime-v2/internalization/__tests__/split-diagnostician-runner-retry.test.js +61 -0
  90. package/dist/runtime-v2/internalization/__tests__/split-diagnostician-runner-retry.test.js.map +1 -1
  91. package/dist/runtime-v2/internalization/artifact-summary.d.ts +11 -0
  92. package/dist/runtime-v2/internalization/artifact-summary.d.ts.map +1 -1
  93. package/dist/runtime-v2/internalization/artifact-summary.js.map +1 -1
  94. package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +48 -14
  95. package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  96. package/dist/runtime-v2/internalization/artificer-prompt-builder.js +32 -1
  97. package/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  98. package/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
  99. package/dist/runtime-v2/internalization/artificer-runner.js +60 -156
  100. package/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
  101. package/dist/runtime-v2/internalization/diag-distiller-runner.d.ts +1 -1
  102. package/dist/runtime-v2/internalization/diag-distiller-runner.d.ts.map +1 -1
  103. package/dist/runtime-v2/internalization/diag-distiller-runner.js +2 -19
  104. package/dist/runtime-v2/internalization/diag-distiller-runner.js.map +1 -1
  105. package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
  106. package/dist/runtime-v2/internalization/diag-rootcause-runner.js +1 -5
  107. package/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
  108. package/dist/runtime-v2/internalization/diag-router-runner.d.ts +1 -1
  109. package/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
  110. package/dist/runtime-v2/internalization/diag-router-runner.js +9 -32
  111. package/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
  112. package/dist/runtime-v2/internalization/dreamer-runner.d.ts +1 -9
  113. package/dist/runtime-v2/internalization/dreamer-runner.d.ts.map +1 -1
  114. package/dist/runtime-v2/internalization/dreamer-runner.js +4 -35
  115. package/dist/runtime-v2/internalization/dreamer-runner.js.map +1 -1
  116. package/dist/runtime-v2/internalization/evaluator-runner.d.ts +3 -54
  117. package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  118. package/dist/runtime-v2/internalization/evaluator-runner.js +18 -230
  119. package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  120. package/dist/runtime-v2/internalization/formation-context.d.ts +208 -0
  121. package/dist/runtime-v2/internalization/formation-context.d.ts.map +1 -0
  122. package/dist/runtime-v2/internalization/formation-context.js +621 -0
  123. package/dist/runtime-v2/internalization/formation-context.js.map +1 -0
  124. package/dist/runtime-v2/internalization/index.d.ts +0 -2
  125. package/dist/runtime-v2/internalization/index.d.ts.map +1 -1
  126. package/dist/runtime-v2/internalization/index.js +0 -2
  127. package/dist/runtime-v2/internalization/index.js.map +1 -1
  128. package/dist/runtime-v2/internalization/philosopher-runner.d.ts.map +1 -1
  129. package/dist/runtime-v2/internalization/philosopher-runner.js +1 -25
  130. package/dist/runtime-v2/internalization/philosopher-runner.js.map +1 -1
  131. package/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +53 -1
  132. package/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  133. package/dist/runtime-v2/internalization/scribe-prompt-builder.js +65 -3
  134. package/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  135. package/dist/runtime-v2/internalization/scribe-runner.d.ts +17 -0
  136. package/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  137. package/dist/runtime-v2/internalization/scribe-runner.js +58 -40
  138. package/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  139. package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts.map +1 -1
  140. package/dist/runtime-v2/internalization/split-diagnostician-runner.js +13 -2
  141. package/dist/runtime-v2/internalization/split-diagnostician-runner.js.map +1 -1
  142. package/dist/runtime-v2/observer/__tests__/agent-scheduler.test.js +31 -21
  143. package/dist/runtime-v2/observer/__tests__/agent-scheduler.test.js.map +1 -1
  144. package/dist/runtime-v2/observer/agent-scheduler.d.ts +0 -5
  145. package/dist/runtime-v2/observer/agent-scheduler.d.ts.map +1 -1
  146. package/dist/runtime-v2/owner-decision/__tests__/owner-decision-view.test.d.ts +2 -0
  147. package/dist/runtime-v2/owner-decision/__tests__/owner-decision-view.test.d.ts.map +1 -0
  148. package/dist/runtime-v2/owner-decision/__tests__/owner-decision-view.test.js +559 -0
  149. package/dist/runtime-v2/owner-decision/__tests__/owner-decision-view.test.js.map +1 -0
  150. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.d.ts +7868 -0
  151. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.d.ts.map +1 -0
  152. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.js +367 -0
  153. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.js.map +1 -0
  154. package/dist/runtime-v2/owner-decision/owner-decision-view.d.ts +415 -0
  155. package/dist/runtime-v2/owner-decision/owner-decision-view.d.ts.map +1 -0
  156. package/dist/runtime-v2/owner-decision/owner-decision-view.js +856 -0
  157. package/dist/runtime-v2/owner-decision/owner-decision-view.js.map +1 -0
  158. package/dist/runtime-v2/owner-decision/semantic-selector.d.ts +72 -0
  159. package/dist/runtime-v2/owner-decision/semantic-selector.d.ts.map +1 -0
  160. package/dist/runtime-v2/owner-decision/semantic-selector.js +176 -0
  161. package/dist/runtime-v2/owner-decision/semantic-selector.js.map +1 -0
  162. package/dist/runtime-v2/runner/base-peer-runner.d.ts +0 -125
  163. package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  164. package/dist/runtime-v2/runner/base-peer-runner.js +0 -323
  165. package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  166. package/dist/runtime-v2/runner/peer-runner-types.d.ts +0 -12
  167. package/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
  168. package/dist/runtime-v2/signal-collector/types.d.ts +0 -12
  169. package/dist/runtime-v2/signal-collector/types.d.ts.map +1 -1
  170. package/dist/runtime-v2/signal-collector/types.js.map +1 -1
  171. package/dist/runtime-v2/types/event-types.d.ts +9 -0
  172. package/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  173. package/dist/runtime-v2/types/event-types.js +12 -0
  174. package/dist/runtime-v2/types/event-types.js.map +1 -1
  175. package/dist/telemetry-event.d.ts +2 -2
  176. package/dist/telemetry-event.d.ts.map +1 -1
  177. package/dist/telemetry-event.js +7 -84
  178. package/dist/telemetry-event.js.map +1 -1
  179. package/package.json +1 -1
  180. package/dist/runtime-v2/feature-flags/__tests__/artifact-summary-redundancy-flag.test.d.ts +0 -15
  181. package/dist/runtime-v2/feature-flags/__tests__/artifact-summary-redundancy-flag.test.d.ts.map +0 -1
  182. package/dist/runtime-v2/feature-flags/__tests__/artifact-summary-redundancy-flag.test.js +0 -90
  183. package/dist/runtime-v2/feature-flags/__tests__/artifact-summary-redundancy-flag.test.js.map +0 -1
  184. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.d.ts +0 -12
  185. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.d.ts.map +0 -1
  186. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.js +0 -117
  187. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.js.map +0 -1
  188. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.d.ts +0 -8
  189. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.d.ts.map +0 -1
  190. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.js +0 -56
  191. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.js.map +0 -1
  192. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.pri717.test.d.ts +0 -26
  193. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.pri717.test.d.ts.map +0 -1
  194. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.pri717.test.js +0 -420
  195. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.pri717.test.js.map +0 -1
  196. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.d.ts +0 -15
  197. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.d.ts.map +0 -1
  198. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.js +0 -306
  199. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.js.map +0 -1
  200. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.d.ts +0 -12
  201. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.d.ts.map +0 -1
  202. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.js +0 -176
  203. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.js.map +0 -1
  204. package/dist/runtime-v2/internalization/__tests__/context-resolution.test.d.ts +0 -2
  205. package/dist/runtime-v2/internalization/__tests__/context-resolution.test.d.ts.map +0 -1
  206. package/dist/runtime-v2/internalization/__tests__/context-resolution.test.js +0 -377
  207. package/dist/runtime-v2/internalization/__tests__/context-resolution.test.js.map +0 -1
  208. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-scope-regression.test.d.ts +0 -22
  209. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-scope-regression.test.d.ts.map +0 -1
  210. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-scope-regression.test.js +0 -92
  211. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-scope-regression.test.js.map +0 -1
  212. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-spike.test.d.ts +0 -2
  213. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-spike.test.d.ts.map +0 -1
  214. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-spike.test.js +0 -1039
  215. package/dist/runtime-v2/internalization/__tests__/progressive-disclosure-spike.test.js.map +0 -1
  216. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator-stage-isolation.property.test.d.ts +0 -13
  217. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator-stage-isolation.property.test.d.ts.map +0 -1
  218. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator-stage-isolation.property.test.js +0 -257
  219. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator-stage-isolation.property.test.js.map +0 -1
  220. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.d.ts +0 -11
  221. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.d.ts.map +0 -1
  222. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.js +0 -154
  223. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.js.map +0 -1
  224. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.d.ts +0 -12
  225. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.d.ts.map +0 -1
  226. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.js +0 -254
  227. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.js.map +0 -1
  228. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.d.ts +0 -15
  229. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.d.ts.map +0 -1
  230. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.js +0 -150
  231. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.js.map +0 -1
  232. package/dist/runtime-v2/internalization/__tests__/shared-information-plane-runner.test.d.ts +0 -2
  233. package/dist/runtime-v2/internalization/__tests__/shared-information-plane-runner.test.d.ts.map +0 -1
  234. package/dist/runtime-v2/internalization/__tests__/shared-information-plane-runner.test.js +0 -773
  235. package/dist/runtime-v2/internalization/__tests__/shared-information-plane-runner.test.js.map +0 -1
  236. package/dist/runtime-v2/internalization/__tests__/summary-chain-flow.property.test.d.ts +0 -22
  237. package/dist/runtime-v2/internalization/__tests__/summary-chain-flow.property.test.d.ts.map +0 -1
  238. package/dist/runtime-v2/internalization/__tests__/summary-chain-flow.property.test.js +0 -280
  239. package/dist/runtime-v2/internalization/__tests__/summary-chain-flow.property.test.js.map +0 -1
  240. package/dist/runtime-v2/internalization/__tests__/summary-envelope-writer.property.test.d.ts +0 -25
  241. package/dist/runtime-v2/internalization/__tests__/summary-envelope-writer.property.test.d.ts.map +0 -1
  242. package/dist/runtime-v2/internalization/__tests__/summary-envelope-writer.property.test.js +0 -413
  243. package/dist/runtime-v2/internalization/__tests__/summary-envelope-writer.property.test.js.map +0 -1
  244. package/dist/runtime-v2/internalization/attach-summary-envelope.d.ts +0 -60
  245. package/dist/runtime-v2/internalization/attach-summary-envelope.d.ts.map +0 -1
  246. package/dist/runtime-v2/internalization/attach-summary-envelope.js +0 -126
  247. package/dist/runtime-v2/internalization/attach-summary-envelope.js.map +0 -1
  248. package/dist/runtime-v2/internalization/candidate-lineage.d.ts +0 -185
  249. package/dist/runtime-v2/internalization/candidate-lineage.d.ts.map +0 -1
  250. package/dist/runtime-v2/internalization/candidate-lineage.js +0 -357
  251. package/dist/runtime-v2/internalization/candidate-lineage.js.map +0 -1
  252. package/dist/runtime-v2/internalization/context-manifest.d.ts +0 -117
  253. package/dist/runtime-v2/internalization/context-manifest.d.ts.map +0 -1
  254. package/dist/runtime-v2/internalization/context-manifest.js +0 -156
  255. package/dist/runtime-v2/internalization/context-manifest.js.map +0 -1
  256. package/dist/runtime-v2/internalization/context-manifests.d.ts +0 -148
  257. package/dist/runtime-v2/internalization/context-manifests.d.ts.map +0 -1
  258. package/dist/runtime-v2/internalization/context-manifests.js +0 -323
  259. package/dist/runtime-v2/internalization/context-manifests.js.map +0 -1
  260. package/dist/runtime-v2/internalization/context-resolution.d.ts +0 -189
  261. package/dist/runtime-v2/internalization/context-resolution.d.ts.map +0 -1
  262. package/dist/runtime-v2/internalization/context-resolution.js +0 -317
  263. package/dist/runtime-v2/internalization/context-resolution.js.map +0 -1
  264. package/dist/runtime-v2/internalization/progressive-evaluator.d.ts +0 -115
  265. package/dist/runtime-v2/internalization/progressive-evaluator.d.ts.map +0 -1
  266. package/dist/runtime-v2/internalization/progressive-evaluator.js +0 -248
  267. package/dist/runtime-v2/internalization/progressive-evaluator.js.map +0 -1
  268. package/dist/runtime-v2/internalization/prompt-budget-manager.d.ts +0 -90
  269. package/dist/runtime-v2/internalization/prompt-budget-manager.d.ts.map +0 -1
  270. package/dist/runtime-v2/internalization/prompt-budget-manager.js +0 -149
  271. package/dist/runtime-v2/internalization/prompt-budget-manager.js.map +0 -1
  272. package/dist/runtime-v2/internalization/resolve-injection.d.ts +0 -62
  273. package/dist/runtime-v2/internalization/resolve-injection.d.ts.map +0 -1
  274. package/dist/runtime-v2/internalization/resolve-injection.js +0 -78
  275. package/dist/runtime-v2/internalization/resolve-injection.js.map +0 -1
  276. package/dist/runtime-v2/internalization/summary-field-reader.d.ts +0 -38
  277. package/dist/runtime-v2/internalization/summary-field-reader.d.ts.map +0 -1
  278. package/dist/runtime-v2/internalization/summary-field-reader.js +0 -108
  279. package/dist/runtime-v2/internalization/summary-field-reader.js.map +0 -1
  280. package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.d.ts +0 -2
  281. package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.d.ts.map +0 -1
  282. package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.js +0 -74
  283. package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.js.map +0 -1
  284. package/dist/runtime-v2/observer/__tests__/empathy-observer.test.d.ts +0 -2
  285. package/dist/runtime-v2/observer/__tests__/empathy-observer.test.d.ts.map +0 -1
  286. package/dist/runtime-v2/observer/__tests__/empathy-observer.test.js +0 -85
  287. package/dist/runtime-v2/observer/__tests__/empathy-observer.test.js.map +0 -1
  288. package/dist/runtime-v2/observer/empathy-observer.d.ts +0 -41
  289. package/dist/runtime-v2/observer/empathy-observer.d.ts.map +0 -1
  290. package/dist/runtime-v2/observer/empathy-observer.js +0 -104
  291. package/dist/runtime-v2/observer/empathy-observer.js.map +0 -1
@@ -1,413 +0,0 @@
1
- /**
2
- * Layer 0 writer-side property tests (design §6.1, tasks 3.12–3.20).
3
- *
4
- * These exercise the *wiring* layer (`BasePeerRunner.buildArtifactContentJson`,
5
- * which calls `attachSummaryEnvelope`), not the pure derivation functions
6
- * (those are covered by `artifact-summary.property.test.ts`). The wiring layer
7
- * is where the feature flag, the predecessor-contentHash injection, the
8
- * degradation telemetry, and the "summary failure must not affect task success"
9
- * contract (F11) all live.
10
- *
11
- * CP-04: derivation failure does not affect task success / failure
12
- * CP-05: predecessor summary adds zero extra store reads & is same-source
13
- * CP-06: envelope depth is always exactly one (no nested predecessorSummary)
14
- * CP-11: stale summary content never enters the written contentJson
15
- * CP-32: contentJson key-level compatibility (flag on vs off, byte-identical
16
- * aside from summary/predecessorSummary)
17
- * CP-35: direct-predecessor uniqueness (evaluator loads artificer+scribe,
18
- * diag_router loads rootcause+distiller — only the edge predecessor
19
- * lands in predecessorSummary)
20
- *
21
- * @see .kiro/specs/internalization-progressive-disclosure/design.md §6.1, §16
22
- * @see .kiro/specs/internalization-progressive-disclosure/requirements.md Requirements 1.8, 2, 3.6, 11.5–11.9
23
- */
24
- import { describe, it, expect, vi } from 'vitest';
25
- import { createHash } from 'node:crypto';
26
- import fc from 'fast-check';
27
- import { BasePeerRunner } from '../../runner/base-peer-runner.js';
28
- import { getDefaultPdConfig } from '../../config/pd-config-defaults.js';
29
- import { computeEffectivePdConfig } from '../../config/pd-config-effective.js';
30
- import { computeContentHash } from '../artifact-content-hash.js';
31
- const sha256 = (input) => createHash('sha256').update(input).digest('hex');
32
- const TASK_ID = 'task-layer0-writer-001';
33
- /**
34
- * Build an EffectivePdConfig with the Layer 0 flag on or off. Uses the real
35
- * production config-merge path (`computeEffectivePdConfig`) rather than
36
- * hand-rolling the EffectivePdConfig shape — this is the same path the
37
- * production loader uses (ERR-024: test the real wiring).
38
- */
39
- function makeEffectiveConfig(opts) {
40
- if (!opts.summaryEnabled) {
41
- return computeEffectivePdConfig(null);
42
- }
43
- const base = getDefaultPdConfig();
44
- const userConfig = {
45
- ...base,
46
- features: {
47
- ...base.features,
48
- artifact_summary_redundancy: { category: 'quiet', enabled: true },
49
- },
50
- };
51
- return computeEffectivePdConfig(userConfig);
52
- }
53
- /**
54
- * Test runner exposing the protected `buildArtifactContentJson` directly.
55
- * Mirrors the DegradationTestRunner pattern from
56
- * base-peer-runner-rate-limit-degradation.test.ts.
57
- */
58
- class Layer0TestRunner extends BasePeerRunner {
59
- constructor(deps, effectiveConfig) {
60
- super(deps, { owner: 'test', runtimeKind: 'test-double' }, {
61
- runnerName: 'test',
62
- expectedTaskKind: 'dreamer',
63
- defaultAgentId: 'test',
64
- resultRefPrefix: 'test',
65
- effectiveConfig,
66
- });
67
- }
68
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
69
- get permanentErrorCategories() {
70
- return new Set(['input_invalid', 'output_invalid']);
71
- }
72
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
73
- async buildContext() {
74
- return { contextHash: 'test-hash' };
75
- }
76
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
77
- async invokeRuntime() {
78
- return { runId: 'run-001', runtimeKind: 'test-double', startedAt: new Date().toISOString() };
79
- }
80
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
81
- async validateOutput() {
82
- return { valid: true, errors: [] };
83
- }
84
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this, @typescript-eslint/max-params
85
- async succeedTask(taskId, runId, _output, task) {
86
- return { status: 'succeeded', taskId, runId, attemptCount: task.attemptCount };
87
- }
88
- // eslint-disable-next-line @typescript-eslint/max-params -- mirrors the protected method under test 1:1.
89
- callBuildArtifactContentJson(taskId, runnerKind, output, loadedPredecessor) {
90
- return this.buildArtifactContentJson(taskId, runnerKind, output, loadedPredecessor);
91
- }
92
- /** Expose the flag check for direct assertion. */
93
- callIsArtifactSummaryEnabled() {
94
- return this.isArtifactSummaryEnabled();
95
- }
96
- }
97
- function createMockDeps(overrides) {
98
- return {
99
- stateManager: {
100
- getRetryPolicy: vi.fn().mockReturnValue({ shouldRetry: vi.fn().mockReturnValue(false) }),
101
- markTaskFailed: vi.fn().mockResolvedValue({}),
102
- markTaskSucceeded: vi.fn().mockResolvedValue({}),
103
- updateRunOutput: vi.fn().mockResolvedValue({}),
104
- },
105
- runtimeAdapter: {},
106
- eventEmitter: {
107
- emitTelemetry: vi.fn(),
108
- },
109
- artifactStore: {
110
- // Counting stub: CP-05 proves zero extra reads. Every method the writer
111
- // path could reach is a spy that throws if called unexpectedly.
112
- getArtifactById: vi.fn(),
113
- listBySourceTaskId: vi.fn(),
114
- },
115
- contentHashFn: sha256,
116
- ...overrides,
117
- };
118
- }
119
- function telemetryCalls(mock) {
120
- return mock.mock.calls.map((call) => call[0]);
121
- }
122
- /**
123
- * `emitEvent` prefixes eventType with the runner name (e.g. `test_...`).
124
- * This helper matches on the suffix so tests stay runner-name agnostic.
125
- */
126
- function telemetryWithSuffix(mock, suffix) {
127
- return telemetryCalls(mock).filter((c) => c.eventType.endsWith(`_${suffix}`));
128
- }
129
- /** A legal dreamer-shaped output for the wiring tests. */
130
- const DREAMER_OUTPUT = {
131
- candidates: [{
132
- badDecision: 'renamed without checking callers',
133
- betterDecision: 'audit file tree and grep imports before rename',
134
- rationale: 'cross-package callers break compilation',
135
- riskLevel: 'high',
136
- strategicPerspective: 'caller-side lens',
137
- }],
138
- };
139
- function makePredecessor(runnerKind, content) {
140
- return {
141
- artifactId: `pred-${runnerKind}`,
142
- runnerKind,
143
- contentJson: content,
144
- };
145
- }
146
- // ── CP-32: contentJson key-level compatibility ───────────────────────────────
147
- describe('Layer 0 — CP-32 contentJson key-level compatibility', () => {
148
- it('flag OFF → contentJson is byte-identical to JSON.stringify(output)', () => {
149
- const deps = createMockDeps();
150
- const runner = new Layer0TestRunner(deps); // no effectiveConfig → flag off
151
- expect(runner.callIsArtifactSummaryEnabled()).toBe(false);
152
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, null);
153
- expect(result).toBe(JSON.stringify(DREAMER_OUTPUT));
154
- // And the same when a predecessor is provided: flag off = no envelope at all.
155
- const resultWithPred = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, makePredecessor('diag_router', { summary: 'router output' }));
156
- expect(resultWithPred).toBe(JSON.stringify(DREAMER_OUTPUT));
157
- });
158
- it('flag ON → every original output key is preserved (only summary/predecessorSummary added)', () => {
159
- const deps = createMockDeps();
160
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
161
- expect(runner.callIsArtifactSummaryEnabled()).toBe(true);
162
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, makePredecessor('diag_router', { summary: 'router output' }));
163
- const parsed = JSON.parse(result);
164
- // Every original key from DREAMER_OUTPUT is present and unchanged.
165
- const original = DREAMER_OUTPUT;
166
- for (const key of Object.keys(original)) {
167
- expect(parsed[key]).toEqual(original[key]);
168
- }
169
- // The two additive envelope keys are present.
170
- expect(Object.hasOwn(parsed, 'summary')).toBe(true);
171
- expect(Object.hasOwn(parsed, 'predecessorSummary')).toBe(true);
172
- });
173
- it('flag ON with no predecessor → only `summary` added, no `predecessorSummary` key', () => {
174
- const deps = createMockDeps();
175
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
176
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, null);
177
- const parsed = JSON.parse(result);
178
- expect(Object.hasOwn(parsed, 'summary')).toBe(true);
179
- expect(Object.hasOwn(parsed, 'predecessorSummary')).toBe(false);
180
- });
181
- it('P1 regression: output already declaring a top-level `summary` field (diag_rootcause / diag_router) is NOT overwritten', () => {
182
- // CodeRabbit PR #1273: DiagRootCauseOutputV1 and DiagnosticianOutputV1 both
183
- // declare a top-level `summary` string field. The Layer 0 envelope must not
184
- // clobber it. On collision, the envelope `summary` key is skipped, a
185
- // structured degradation is emitted, and predecessorSummary is still
186
- // attached (it does not collide).
187
- const deps = createMockDeps();
188
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
189
- const emitMock = deps.eventEmitter.emitTelemetry;
190
- // diag_router-shaped output carries a legitimate top-level `summary` field.
191
- const routerOutput = {
192
- summary: 'route to internalization: principle guard', // legitimate output field
193
- rootCause: 'rename without enumeration',
194
- violatedPrinciples: [],
195
- recommendations: [{ kind: 'principle', description: 'guard', triggerPattern: 'x', action: 'y' }],
196
- };
197
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'diag_router', routerOutput, makePredecessor('diag_distiller', { abstractedPrinciple: 'p', rationale: 'r', scope: 'general' }));
198
- const parsed = JSON.parse(result);
199
- // The legitimate output.summary is preserved verbatim (NOT overwritten by
200
- // the ArtifactSummary envelope object).
201
- expect(parsed.summary).toBe('route to internalization: principle guard');
202
- expect(typeof parsed.summary).toBe('string');
203
- // predecessorSummary is still attached (no collision).
204
- expect(Object.hasOwn(parsed, 'predecessorSummary')).toBe(true);
205
- expect(parsed.predecessorSummary.runnerKind).toBe('diag_distiller');
206
- // A structured degradation was emitted for the collision (rc-9).
207
- const skipped = telemetryWithSuffix(emitMock, 'artifact_summary_skipped');
208
- expect(skipped.length).toBe(1);
209
- expect(skipped[0]?.payload?.reason).toBe('output_summary_key_collision');
210
- });
211
- });
212
- // ── CP-04: derivation failure does not affect task success ───────────────────
213
- describe('Layer 0 — CP-04 derivation failure does not affect task success', () => {
214
- it('returns a valid contentJson (no throw) and emits artifact_summary_skipped when output has no derivable field', () => {
215
- const deps = createMockDeps();
216
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
217
- const emitMock = deps.eventEmitter.emitTelemetry;
218
- // An object with none of the fields any resolver looks for → no_derivable_field.
219
- const bare = { unrelated: 'value' };
220
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', bare, null);
221
- // No throw, valid JSON, and falls back to the bare output (no summary key).
222
- expect(() => JSON.parse(result)).not.toThrow();
223
- const parsed = JSON.parse(result);
224
- expect(Object.hasOwn(parsed, 'summary')).toBe(false);
225
- // Exactly one artifact_summary_skipped degradation event emitted (rc-9).
226
- const skipped = telemetryWithSuffix(emitMock, 'artifact_summary_skipped');
227
- expect(skipped.length).toBe(1);
228
- expect(skipped[0]?.payload?.reason).toBe('no_derivable_field');
229
- });
230
- it('output_not_object (e.g. a string) → no summary, no throw', () => {
231
- const deps = createMockDeps();
232
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
233
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', 'not-an-object', null);
234
- // Falls back to JSON.stringify of the input; no summary.
235
- expect(result).toBe(JSON.stringify('not-an-object'));
236
- });
237
- });
238
- // ── CP-06: envelope depth is always exactly one ──────────────────────────────
239
- describe('Layer 0 — CP-06 envelope depth is always exactly one', () => {
240
- it('predecessorSummary never carries its own predecessorSummary key', () => {
241
- const deps = createMockDeps();
242
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
243
- // Even when the predecessor's own contentJson already contains a nested
244
- // predecessorSummary (as if it were itself a mid-chain node), the freshly
245
- // attached predecessorSummary must NOT propagate that nested ref — depth is
246
- // capped at one (design §4.6 修正六).
247
- const pred = makePredecessor('diag_router', {
248
- summary: 'router output',
249
- predecessorSummary: { artifactId: 'should-not-propagate', runnerKind: 'diag_distiller' },
250
- });
251
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, pred);
252
- const parsed = JSON.parse(result);
253
- const predSummary = parsed.predecessorSummary;
254
- expect(predSummary).toBeDefined();
255
- // The only keys on predecessorSummary are artifactId/runnerKind/contentHash/summary.
256
- const allowed = new Set(['artifactId', 'runnerKind', 'contentHash', 'summary']);
257
- for (const key of Object.keys(predSummary)) {
258
- expect(allowed.has(key)).toBe(true);
259
- }
260
- // And critically: no nested predecessorSummary.predecessorSummary.
261
- const nested = predSummary.summary;
262
- expect(Object.hasOwn(nested, 'predecessorSummary')).toBe(false);
263
- });
264
- it('a synthetic 1..6-hop chain never produces nested predecessorSummary at any hop', () => {
265
- fc.assert(fc.property(fc.integer({ min: 1, max: 6 }), (hops) => {
266
- const deps = createMockDeps();
267
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
268
- // Build hops sequentially, feeding each hop's written contentJson as
269
- // the next hop's predecessor content.
270
- const kinds = ['diag_rootcause', 'diag_distiller', 'diag_router', 'dreamer', 'philosopher', 'scribe'];
271
- let prevContent = { rootCause: 'seed root cause' };
272
- let prevKind = 'diag_rootcause';
273
- for (let i = 0; i < hops; i++) {
274
- const kind = kinds[Math.min(i, kinds.length - 1)] ?? 'scribe';
275
- const predecessor = i === 0
276
- ? null
277
- : { artifactId: `art-${i}`, runnerKind: prevKind, contentJson: prevContent };
278
- const out = { candidates: [{ betterDecision: 'hop action', riskLevel: 'low' }] };
279
- const written = runner.callBuildArtifactContentJson(`task-${i}`, kind, out, predecessor);
280
- const parsed = JSON.parse(written);
281
- // Check this hop's predecessorSummary (if present) has no nesting.
282
- const pred = parsed.predecessorSummary;
283
- if (pred) {
284
- const allowed = new Set(['artifactId', 'runnerKind', 'contentHash', 'summary']);
285
- for (const key of Object.keys(pred))
286
- expect(allowed.has(key)).toBe(true);
287
- const inner = pred.summary;
288
- expect(Object.hasOwn(inner, 'predecessorSummary')).toBe(false);
289
- }
290
- prevContent = parsed;
291
- prevKind = kind;
292
- }
293
- }), { numRuns: 12 });
294
- });
295
- });
296
- // ── CP-05: predecessor summary adds zero extra store reads & is same-source ──
297
- describe('Layer 0 — CP-05 predecessor summary zero extra reads & same-source', () => {
298
- it('flag ON with predecessor → no artifactStore.getArtifactById/listBySourceTaskId calls', () => {
299
- const deps = createMockDeps();
300
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
301
- const getMock = deps.artifactStore.getArtifactById;
302
- const listMock = deps.artifactStore.listBySourceTaskId;
303
- runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, makePredecessor('diag_router', { summary: 'router output' }));
304
- expect(getMock).not.toHaveBeenCalled();
305
- expect(listMock).not.toHaveBeenCalled();
306
- });
307
- it('predecessorSummary artifactId / runnerKind / contentHash are all same-source (rc-6)', () => {
308
- const deps = createMockDeps();
309
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
310
- const predContent = { summary: 'router output', rootCause: 'rc' };
311
- const pred = {
312
- artifactId: 'pred-art-999',
313
- runnerKind: 'diag_router',
314
- contentJson: predContent,
315
- };
316
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, pred);
317
- const parsed = JSON.parse(result);
318
- const predSummary = parsed.predecessorSummary;
319
- // All three fields come from the same predecessor object.
320
- expect(predSummary.artifactId).toBe('pred-art-999');
321
- expect(predSummary.runnerKind).toBe('diag_router');
322
- // contentHash is the canonical (key-sorted) serialization of the predecessor content.
323
- expect(predSummary.contentHash).toBe(computeContentHash(predContent, sha256));
324
- });
325
- it('null predecessor → artifact_summary_predecessor_absent emitted, self summary still written', () => {
326
- const deps = createMockDeps();
327
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
328
- const emitMock = deps.eventEmitter.emitTelemetry;
329
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, null);
330
- const parsed = JSON.parse(result);
331
- expect(Object.hasOwn(parsed, 'summary')).toBe(true);
332
- expect(Object.hasOwn(parsed, 'predecessorSummary')).toBe(false);
333
- const absent = telemetryWithSuffix(emitMock, 'artifact_summary_predecessor_absent');
334
- expect(absent.length).toBe(1);
335
- expect(absent[0]?.payload?.reason).toBe('no_predecessor_in_context');
336
- });
337
- });
338
- // ── CP-11: stale summary content never enters the written contentJson ────────
339
- //
340
- // Note: CP-11's core invariant (stale predecessorSummary content is excluded
341
- // from the injected context) is enforced by the READ-side freshness check
342
- // (`checkPredecessorSummaryFreshness`, covered by summary-freshness.property
343
- // .test.ts CP-09). The WRITE side tested here guarantees the contentHash is
344
- // computed correctly so the read side can detect staleness. This test verifies
345
- // the contentHash is stable for a given content, so a content change is always
346
- // detectable.
347
- describe('Layer 0 — CP-11 stale summary detectability (contentHash stability on write)', () => {
348
- it('contentHash changes iff predecessor content changes (so stale refs are always detectable)', () => {
349
- const deps = createMockDeps();
350
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
351
- const contentA = { summary: 'router output v1' };
352
- const contentB = { summary: 'router output v2' };
353
- const r1 = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, makePredecessor('diag_router', contentA));
354
- const r2 = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, makePredecessor('diag_router', contentA));
355
- const r3 = runner.callBuildArtifactContentJson(TASK_ID, 'dreamer', DREAMER_OUTPUT, makePredecessor('diag_router', contentB));
356
- const hashOf = (s) => {
357
- const parsed = JSON.parse(s);
358
- const pred = parsed.predecessorSummary;
359
- return pred.contentHash;
360
- };
361
- // Same content → same hash (deterministic).
362
- expect(hashOf(r1)).toBe(hashOf(r2));
363
- // Different content → different hash (staleness is detectable).
364
- expect(hashOf(r1)).not.toBe(hashOf(r3));
365
- });
366
- });
367
- // ── CP-35: direct-predecessor uniqueness ──────────────────────────────────────
368
- //
369
- // F17: some runners load TWO artifacts in the same context (evaluator loads
370
- // artificer+scribe; diag_router loads rootcause+distiller). Only the EDGE
371
- // predecessor may land in predecessorSummary. The wiring helper
372
- // (attachSummaryEnvelope) only ever receives ONE predecessor object — the
373
- // caller (runner) is responsible for passing the edge one. This test proves the
374
- // single-predecessor contract holds regardless of what else is in memory.
375
- describe('Layer 0 — CP-35 direct-predecessor uniqueness (single predecessor per write)', () => {
376
- it('each call writes at most one predecessorSummary — the object the caller passed', () => {
377
- const deps = createMockDeps();
378
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
379
- // Simulate evaluator's multi-artifact context: it loaded BOTH artificer
380
- // (edge predecessor) AND scribe (non-edge). Only artificer may go into
381
- // predecessorSummary. The wiring contract: the runner passes ONLY the edge
382
- // predecessor; scribe flows through its separate path.
383
- const artificerContent = { affectedTools: ['t1'], implementationSummary: 'impl', sourceTrace: { scribeArtifactId: 'scribe-art-1' } };
384
- const scribeContent = { principleDraft: { statement: 'principle' } };
385
- // Evaluator passes ONLY artificer as loadedPredecessor (edge predecessor).
386
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'evaluator', { evaluation: { decision: 'approved', concerns: [] }, codeReview: { intentConsistency: { aligned: true } } }, makePredecessor('artificer', artificerContent));
387
- const parsed = JSON.parse(result);
388
- const predSummary = parsed.predecessorSummary;
389
- // Exactly one predecessorSummary, and it's the artificer (edge).
390
- expect(predSummary).toBeDefined();
391
- expect(predSummary.runnerKind).toBe('artificer');
392
- expect(predSummary.artifactId).toBe('pred-artificer');
393
- // The scribe content (a sentinel string) must NOT appear anywhere in the
394
- // written contentJson — it was never passed in.
395
- expect(result).not.toContain(JSON.stringify(scribeContent.principleDraft));
396
- });
397
- it('passing the non-edge predecessor (scribe) is the caller\'s contract violation, but the helper still writes exactly one', () => {
398
- // This documents the contract boundary: attachSummaryEnvelope trusts the
399
- // caller to pass the edge predecessor. If a caller passes the wrong one,
400
- // the helper still writes exactly ONE predecessorSummary — it never
401
- // merges multiple. This is the invariant CP-35 guards.
402
- const deps = createMockDeps();
403
- const runner = new Layer0TestRunner(deps, makeEffectiveConfig({ summaryEnabled: true }));
404
- const result = runner.callBuildArtifactContentJson(TASK_ID, 'evaluator', { evaluation: { decision: 'approved', concerns: [] } }, makePredecessor('scribe', { principleDraft: { statement: 'p' } }));
405
- const parsed = JSON.parse(result);
406
- const predSummary = parsed.predecessorSummary;
407
- expect(predSummary).toBeDefined();
408
- // Exactly one — no array, no merge.
409
- expect(typeof predSummary).toBe('object');
410
- expect(Array.isArray(predSummary)).toBe(false);
411
- });
412
- });
413
- //# sourceMappingURL=summary-envelope-writer.property.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summary-envelope-writer.property.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/summary-envelope-writer.property.test.ts"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Layer 0 — writer-side summary envelope attachment (design §6.1, PR 1 /
3
- * task 3.11).
4
- *
5
- * Pure logic only: no I/O, no artifact-store calls. `loadedPredecessor` must
6
- * already be in memory — it is the same object the runner's `buildContext`
7
- * loaded for the current invocation (design F3, zero additional store
8
- * reads). This mirrors the `attachSummaryEnvelope` pseudocode in design §6.1
9
- * exactly: self-summary → predecessor-summary reuse/derive → envelope.
10
- */
11
- import { type ArtifactSummaryEnvelope, type SummaryRunnerKind } from './artifact-summary.js';
12
- import { type HashFn } from './artifact-content-hash.js';
13
- /**
14
- * The task-graph edge-predecessor for each `SummaryRunnerKind` (design §6.1
15
- * "直接前驱"表 — the *single* upstream node the pipeline's own edges define,
16
- * distinct from any other artifact a runner happens to load in the same
17
- * context). `diag_rootcause` has no predecessor (chain root).
18
- */
19
- export declare const SUMMARY_EDGE_PREDECESSOR: Readonly<Record<SummaryRunnerKind, SummaryRunnerKind | null>>;
20
- /** The predecessor artifact as already loaded by the runner's buildContext (design F3). */
21
- export interface LoadedPredecessorArtifact {
22
- readonly artifactId: string;
23
- readonly runnerKind: SummaryRunnerKind;
24
- readonly contentJson: unknown;
25
- }
26
- export type AttachSummaryEnvelopeDegradation = {
27
- readonly type: 'artifact_summary_skipped';
28
- readonly runnerKind: SummaryRunnerKind;
29
- readonly reason: string;
30
- } | {
31
- readonly type: 'artifact_summary_predecessor_absent';
32
- readonly runnerKind: SummaryRunnerKind;
33
- readonly reason: 'no_predecessor_in_context';
34
- } | {
35
- readonly type: 'artifact_summary_predecessor_skipped';
36
- readonly runnerKind: SummaryRunnerKind;
37
- readonly reason: string;
38
- };
39
- /**
40
- * Attach a summary envelope to a runner's output (design §6.1
41
- * `attachSummaryEnvelope`).
42
- *
43
- * Returns the *partial* envelope fields to merge into `contentJson` — never
44
- * the full contentJson itself, and never mutates its inputs. Every
45
- * degradation path (self-derivation failure, no predecessor in context,
46
- * predecessor-derivation failure) is reported via `onDegradation` with an
47
- * explicit reason (rc-9) — this function itself never throws.
48
- *
49
- * Postconditions:
50
- * - self-derivation failure → `{}` (no `summary` written) + one
51
- * `artifact_summary_skipped` degradation
52
- * - no predecessor in context → `{ summary }` + one
53
- * `artifact_summary_predecessor_absent` degradation
54
- * - predecessor summary present (reused or freshly derived) →
55
- * `{ summary, predecessorSummary }`, no degradation for the predecessor
56
- * - predecessor derivation failure → `{ summary }` + one
57
- * `artifact_summary_predecessor_skipped` degradation
58
- */
59
- export declare function attachSummaryEnvelope(runnerKind: SummaryRunnerKind, validatedOutput: unknown, loadedPredecessor: LoadedPredecessorArtifact | null, hash: HashFn, onDegradation: (event: AttachSummaryEnvelopeDegradation) => void): Partial<ArtifactSummaryEnvelope>;
60
- //# sourceMappingURL=attach-summary-envelope.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attach-summary-envelope.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/attach-summary-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAKL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAsB,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAE7E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC,CASlG,CAAC;AAEF,2FAA2F;AAC3F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,MAAM,gCAAgC,GACxC;IAAE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9G;IAAE,QAAQ,CAAC,IAAI,EAAE,qCAAqC,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAA;CAAE,GAC9I;IAAE,QAAQ,CAAC,IAAI,EAAE,sCAAsC,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAsC/H;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,OAAO,EACxB,iBAAiB,EAAE,yBAAyB,GAAG,IAAI,EACnD,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,KAAK,EAAE,gCAAgC,KAAK,IAAI,GAC/D,OAAO,CAAC,uBAAuB,CAAC,CAiClC"}
@@ -1,126 +0,0 @@
1
- /**
2
- * Layer 0 — writer-side summary envelope attachment (design §6.1, PR 1 /
3
- * task 3.11).
4
- *
5
- * Pure logic only: no I/O, no artifact-store calls. `loadedPredecessor` must
6
- * already be in memory — it is the same object the runner's `buildContext`
7
- * loaded for the current invocation (design F3, zero additional store
8
- * reads). This mirrors the `attachSummaryEnvelope` pseudocode in design §6.1
9
- * exactly: self-summary → predecessor-summary reuse/derive → envelope.
10
- */
11
- import { deriveArtifactSummary, ARTIFACT_SUMMARY_SCHEMA_VERSION, SUMMARY_RUNNER_KINDS, } from './artifact-summary.js';
12
- import { computeContentHash } from './artifact-content-hash.js';
13
- /**
14
- * The task-graph edge-predecessor for each `SummaryRunnerKind` (design §6.1
15
- * "直接前驱"表 — the *single* upstream node the pipeline's own edges define,
16
- * distinct from any other artifact a runner happens to load in the same
17
- * context). `diag_rootcause` has no predecessor (chain root).
18
- */
19
- export const SUMMARY_EDGE_PREDECESSOR = {
20
- diag_rootcause: null,
21
- diag_distiller: 'diag_rootcause',
22
- diag_router: 'diag_distiller',
23
- dreamer: 'diag_router',
24
- philosopher: 'dreamer',
25
- scribe: 'philosopher',
26
- artificer: 'scribe',
27
- evaluator: 'artificer',
28
- };
29
- /**
30
- * Reads a previously-attached `summary` field off a predecessor's raw
31
- * contentJson (rc-1 / rc-5), so a fresh derivation is only performed when
32
- * the predecessor never got one (e.g. `artifact_summary_redundancy` was
33
- * off when the predecessor was written, or its derivation failed).
34
- */
35
- function readExistingSummary(contentJson) {
36
- if (contentJson === null || typeof contentJson !== 'object' || Array.isArray(contentJson))
37
- return null;
38
- if (!Object.hasOwn(contentJson, 'summary'))
39
- return null;
40
- const { summary } = contentJson;
41
- if (summary === null || typeof summary !== 'object' || Array.isArray(summary))
42
- return null;
43
- const candidate = summary;
44
- // rc-2 / CodeRabbit PR #1273 #10: validate value types, not just key
45
- // presence. A malformed summary (e.g. headline is a number, fields is an
46
- // array) would otherwise be forwarded verbatim and persist invalid data.
47
- // On any type mismatch, return null so the caller re-derives from the
48
- // predecessor's contentJson instead of reusing garbage.
49
- if (!Object.hasOwn(candidate, 'schemaVersion') || candidate.schemaVersion !== ARTIFACT_SUMMARY_SCHEMA_VERSION)
50
- return null;
51
- if (!Object.hasOwn(candidate, 'runnerKind') || typeof candidate.runnerKind !== 'string' || !SUMMARY_RUNNER_KINDS.includes(candidate.runnerKind))
52
- return null;
53
- if (!Object.hasOwn(candidate, 'headline') || typeof candidate.headline !== 'string')
54
- return null;
55
- if (!Object.hasOwn(candidate, 'fields') || candidate.fields === null || typeof candidate.fields !== 'object' || Array.isArray(candidate.fields))
56
- return null;
57
- const fieldsObj = candidate.fields;
58
- if (!Object.values(fieldsObj).every((v) => typeof v === 'string'))
59
- return null;
60
- if (!Object.hasOwn(candidate, 'derivedFrom') || candidate.derivedFrom !== 'structured_output')
61
- return null;
62
- if (!Object.hasOwn(candidate, 'omittedFields') || !Array.isArray(candidate.omittedFields))
63
- return null;
64
- if (!candidate.omittedFields.every((v) => typeof v === 'string'))
65
- return null;
66
- return {
67
- schemaVersion: ARTIFACT_SUMMARY_SCHEMA_VERSION,
68
- runnerKind: candidate.runnerKind,
69
- headline: candidate.headline,
70
- fields: fieldsObj,
71
- derivedFrom: 'structured_output',
72
- omittedFields: candidate.omittedFields,
73
- };
74
- }
75
- /**
76
- * Attach a summary envelope to a runner's output (design §6.1
77
- * `attachSummaryEnvelope`).
78
- *
79
- * Returns the *partial* envelope fields to merge into `contentJson` — never
80
- * the full contentJson itself, and never mutates its inputs. Every
81
- * degradation path (self-derivation failure, no predecessor in context,
82
- * predecessor-derivation failure) is reported via `onDegradation` with an
83
- * explicit reason (rc-9) — this function itself never throws.
84
- *
85
- * Postconditions:
86
- * - self-derivation failure → `{}` (no `summary` written) + one
87
- * `artifact_summary_skipped` degradation
88
- * - no predecessor in context → `{ summary }` + one
89
- * `artifact_summary_predecessor_absent` degradation
90
- * - predecessor summary present (reused or freshly derived) →
91
- * `{ summary, predecessorSummary }`, no degradation for the predecessor
92
- * - predecessor derivation failure → `{ summary }` + one
93
- * `artifact_summary_predecessor_skipped` degradation
94
- */
95
- // eslint-disable-next-line @typescript-eslint/max-params -- mirrors design §6.1 attachSummaryEnvelope pseudocode 1:1; grouping into an options object would diverge from the spec contract.
96
- export function attachSummaryEnvelope(runnerKind, validatedOutput, loadedPredecessor, hash, onDegradation) {
97
- const selfResult = deriveArtifactSummary(runnerKind, validatedOutput);
98
- if (!selfResult.ok) {
99
- onDegradation({ type: 'artifact_summary_skipped', runnerKind, reason: selfResult.reason });
100
- return {};
101
- }
102
- const envelope = { summary: selfResult.value };
103
- if (loadedPredecessor === null) {
104
- onDegradation({ type: 'artifact_summary_predecessor_absent', runnerKind, reason: 'no_predecessor_in_context' });
105
- return envelope;
106
- }
107
- let predecessorSummary = readExistingSummary(loadedPredecessor.contentJson);
108
- if (predecessorSummary === null) {
109
- const predResult = deriveArtifactSummary(loadedPredecessor.runnerKind, loadedPredecessor.contentJson);
110
- if (!predResult.ok) {
111
- onDegradation({ type: 'artifact_summary_predecessor_skipped', runnerKind, reason: predResult.reason });
112
- return envelope;
113
- }
114
- predecessorSummary = predResult.value;
115
- }
116
- return {
117
- ...envelope,
118
- predecessorSummary: {
119
- artifactId: loadedPredecessor.artifactId,
120
- runnerKind: loadedPredecessor.runnerKind,
121
- contentHash: computeContentHash(loadedPredecessor.contentJson, hash),
122
- summary: predecessorSummary,
123
- },
124
- };
125
- }
126
- //# sourceMappingURL=attach-summary-envelope.js.map