create-principles-disciple 1.95.0 → 1.97.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 (263) hide show
  1. package/console/dist/server/config/pd-config-store.js +49 -12
  2. package/console/dist/server/index.js +4 -3
  3. package/console/dist/server/models/IntentPageModel.d.ts +36 -2
  4. package/console/dist/server/models/IntentPageModel.js +213 -11
  5. package/console/dist/server/routes/intent.d.ts +5 -1
  6. package/console/dist/server/routes/intent.js +200 -12
  7. package/console/dist/types.d.ts +1 -0
  8. package/console/dist/ui/App.js +0 -53
  9. package/console/dist/ui/api.d.ts +18 -4
  10. package/console/dist/ui/api.js +38 -5
  11. package/console/dist/ui/components/layout/app-sidebar.js +12 -12
  12. package/console/dist/ui/components/ui/badge.d.ts +1 -1
  13. package/console/dist/ui/i18n/en.json +142 -3
  14. package/console/dist/ui/i18n/zh-CN.json +142 -3
  15. package/console/dist/ui/pages/control-center/AgentCard.d.ts +31 -0
  16. package/console/dist/ui/pages/control-center/AgentCard.js +156 -0
  17. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +26 -0
  18. package/console/dist/ui/pages/control-center/AgentGroup.js +38 -0
  19. package/console/dist/ui/pages/control-center/ControlCenterPage.js +77 -41
  20. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +17 -0
  21. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +55 -0
  22. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +67 -0
  23. package/console/dist/ui/pages/intent/IntentOnboarding.js +289 -0
  24. package/console/dist/ui/pages/intent/IntentPage.js +117 -6
  25. package/console/dist/ui/utils/agent-metadata.d.ts +58 -0
  26. package/console/dist/ui/utils/agent-metadata.js +275 -0
  27. package/console/dist/ui/utils/control-center-helpers.d.ts +19 -0
  28. package/console/dist/ui/utils/control-center-helpers.js +37 -0
  29. package/console/dist/ui/utils/validators.d.ts +37 -0
  30. package/console/dist/ui/utils/validators.js +130 -0
  31. package/console/dist/web/assets/app.css +360 -3
  32. package/console/dist/web/assets/app.js +2952 -1143
  33. package/console/package.json +1 -1
  34. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +27 -35
  35. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  36. package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +85 -7
  37. package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -1
  38. package/core/dist/runtime-v2/__tests__/golden-trace-replay-validator.test.js +70 -0
  39. package/core/dist/runtime-v2/__tests__/golden-trace-replay-validator.test.js.map +1 -1
  40. package/core/dist/runtime-v2/__tests__/golden-trace.test.js +136 -1
  41. package/core/dist/runtime-v2/__tests__/golden-trace.test.js.map +1 -1
  42. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.d.ts +2 -0
  43. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.d.ts.map +1 -0
  44. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.js +211 -0
  45. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.js.map +1 -0
  46. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +93 -0
  47. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
  48. package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts +11 -0
  49. package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts.map +1 -1
  50. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js +22 -0
  51. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
  52. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.d.ts +2 -0
  53. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.d.ts.map +1 -0
  54. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.js +74 -0
  55. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.js.map +1 -0
  56. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.d.ts +2 -0
  57. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.d.ts.map +1 -0
  58. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.js +246 -0
  59. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.js.map +1 -0
  60. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  61. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +7 -0
  62. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  63. package/core/dist/runtime-v2/feature-flags/index.d.ts +2 -0
  64. package/core/dist/runtime-v2/feature-flags/index.d.ts.map +1 -1
  65. package/core/dist/runtime-v2/feature-flags/index.js +2 -0
  66. package/core/dist/runtime-v2/feature-flags/index.js.map +1 -1
  67. package/{plugin/dist/core/surface-guard.d.ts → core/dist/runtime-v2/feature-flags/surface-guard-policy.d.ts} +15 -5
  68. package/core/dist/runtime-v2/feature-flags/surface-guard-policy.d.ts.map +1 -0
  69. package/{plugin/dist/core/surface-guard.js → core/dist/runtime-v2/feature-flags/surface-guard-policy.js} +14 -2
  70. package/core/dist/runtime-v2/feature-flags/surface-guard-policy.js.map +1 -0
  71. package/core/dist/runtime-v2/golden-trace-replay-validator.js +1 -1
  72. package/core/dist/runtime-v2/golden-trace-replay-validator.js.map +1 -1
  73. package/core/dist/runtime-v2/golden-trace.d.ts +19 -3
  74. package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
  75. package/core/dist/runtime-v2/golden-trace.js +2 -0
  76. package/core/dist/runtime-v2/golden-trace.js.map +1 -1
  77. package/core/dist/runtime-v2/index.d.ts +15 -3
  78. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  79. package/core/dist/runtime-v2/index.js +11 -2
  80. package/core/dist/runtime-v2/index.js.map +1 -1
  81. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.d.ts +2 -0
  82. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.d.ts.map +1 -0
  83. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.js +88 -0
  84. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.js.map +1 -0
  85. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +91 -1
  86. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -1
  87. package/core/dist/runtime-v2/intent/index.d.ts +2 -0
  88. package/core/dist/runtime-v2/intent/index.d.ts.map +1 -1
  89. package/core/dist/runtime-v2/intent/index.js +2 -0
  90. package/core/dist/runtime-v2/intent/index.js.map +1 -1
  91. package/core/dist/runtime-v2/intent/intent-browser.d.ts +23 -0
  92. package/core/dist/runtime-v2/intent/intent-browser.d.ts.map +1 -0
  93. package/core/dist/runtime-v2/intent/intent-browser.js +21 -0
  94. package/core/dist/runtime-v2/intent/intent-browser.js.map +1 -0
  95. package/core/dist/runtime-v2/intent/intent-doc-version.d.ts +28 -0
  96. package/core/dist/runtime-v2/intent/intent-doc-version.d.ts.map +1 -0
  97. package/core/dist/runtime-v2/intent/intent-doc-version.js +21 -0
  98. package/core/dist/runtime-v2/intent/intent-doc-version.js.map +1 -0
  99. package/core/dist/runtime-v2/intent/intent-doc.d.ts +17 -1
  100. package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -1
  101. package/core/dist/runtime-v2/intent/intent-doc.js +95 -7
  102. package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -1
  103. package/core/dist/runtime-v2/intent/intent-hash.d.ts +2 -0
  104. package/core/dist/runtime-v2/intent/intent-hash.d.ts.map +1 -0
  105. package/core/dist/runtime-v2/intent/intent-hash.js +10 -0
  106. package/core/dist/runtime-v2/intent/intent-hash.js.map +1 -0
  107. package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +41 -1
  108. package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
  109. package/core/dist/runtime-v2/internalization/__tests__/artificer-rule-output.test.js +130 -2
  110. package/core/dist/runtime-v2/internalization/__tests__/artificer-rule-output.test.js.map +1 -1
  111. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.d.ts +2 -0
  112. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.d.ts.map +1 -0
  113. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.js +228 -0
  114. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.js.map +1 -0
  115. package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +41 -11
  116. package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
  117. package/core/dist/runtime-v2/internalization/__tests__/refiner-sandbox-wrapper.test.js +135 -0
  118. package/core/dist/runtime-v2/internalization/__tests__/refiner-sandbox-wrapper.test.js.map +1 -1
  119. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.d.ts +2 -0
  120. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.d.ts.map +1 -0
  121. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.js +449 -0
  122. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.js.map +1 -0
  123. package/core/dist/runtime-v2/internalization/adversarial-case.d.ts.map +1 -1
  124. package/core/dist/runtime-v2/internalization/adversarial-case.js +24 -0
  125. package/core/dist/runtime-v2/internalization/adversarial-case.js.map +1 -1
  126. package/core/dist/runtime-v2/internalization/artificer-output.d.ts +10 -0
  127. package/core/dist/runtime-v2/internalization/artificer-output.d.ts.map +1 -1
  128. package/core/dist/runtime-v2/internalization/artificer-output.js +45 -0
  129. package/core/dist/runtime-v2/internalization/artificer-output.js.map +1 -1
  130. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +2 -2
  131. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  132. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +7 -2
  133. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  134. package/core/dist/runtime-v2/internalization/behavior-example-pack.d.ts +66 -0
  135. package/core/dist/runtime-v2/internalization/behavior-example-pack.d.ts.map +1 -0
  136. package/core/dist/runtime-v2/internalization/behavior-example-pack.js +183 -0
  137. package/core/dist/runtime-v2/internalization/behavior-example-pack.js.map +1 -0
  138. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +8 -0
  139. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
  140. package/core/dist/runtime-v2/internalization/evaluator-output.js +10 -0
  141. package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
  142. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts +17 -0
  143. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  144. package/core/dist/runtime-v2/internalization/evaluator-runner.js +118 -24
  145. package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  146. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts.map +1 -1
  147. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js +1 -1
  148. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js.map +1 -1
  149. package/core/dist/runtime-v2/internalization/rule-context-v2.d.ts +61 -0
  150. package/core/dist/runtime-v2/internalization/rule-context-v2.d.ts.map +1 -0
  151. package/core/dist/runtime-v2/internalization/rule-context-v2.js +301 -0
  152. package/core/dist/runtime-v2/internalization/rule-context-v2.js.map +1 -0
  153. package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts +9 -0
  154. package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts.map +1 -1
  155. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.d.ts +55 -0
  156. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.d.ts.map +1 -0
  157. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.js +131 -0
  158. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.js.map +1 -0
  159. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  160. package/core/dist/runtime-v2/pain-signal-observability.js +24 -1
  161. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  162. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.d.ts +2 -0
  163. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.d.ts.map +1 -0
  164. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.js +95 -0
  165. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.js.map +1 -0
  166. package/core/dist/runtime-v2/risk/index.d.ts +7 -0
  167. package/core/dist/runtime-v2/risk/index.d.ts.map +1 -0
  168. package/core/dist/runtime-v2/risk/index.js +6 -0
  169. package/core/dist/runtime-v2/risk/index.js.map +1 -0
  170. package/core/dist/runtime-v2/risk/risk-calculator-policy.d.ts +18 -0
  171. package/core/dist/runtime-v2/risk/risk-calculator-policy.d.ts.map +1 -0
  172. package/core/dist/runtime-v2/risk/risk-calculator-policy.js +47 -0
  173. package/core/dist/runtime-v2/risk/risk-calculator-policy.js.map +1 -0
  174. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.d.ts +2 -0
  175. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.d.ts.map +1 -0
  176. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.js +83 -0
  177. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.js.map +1 -0
  178. package/core/dist/runtime-v2/store/intent/index.d.ts +2 -1
  179. package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -1
  180. package/core/dist/runtime-v2/store/intent/index.js +2 -1
  181. package/core/dist/runtime-v2/store/intent/index.js.map +1 -1
  182. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.d.ts +28 -0
  183. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.d.ts.map +1 -0
  184. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.js +88 -0
  185. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.js.map +1 -0
  186. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  187. package/core/dist/runtime-v2/store/sqlite-connection.js +14 -0
  188. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  189. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts +2 -0
  190. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts.map +1 -0
  191. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js +149 -0
  192. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js.map +1 -0
  193. package/core/dist/runtime-v2/thinking-models/index.d.ts +3 -0
  194. package/core/dist/runtime-v2/thinking-models/index.d.ts.map +1 -0
  195. package/core/dist/runtime-v2/thinking-models/index.js +3 -0
  196. package/core/dist/runtime-v2/thinking-models/index.js.map +1 -0
  197. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts +73 -0
  198. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts.map +1 -0
  199. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.js +227 -0
  200. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.js.map +1 -0
  201. package/core/dist/runtime-v2/tools/__tests__/artificer-l2-tool-contract.test.js +40 -1
  202. package/core/dist/runtime-v2/tools/__tests__/artificer-l2-tool-contract.test.js.map +1 -1
  203. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
  204. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js +28 -1
  205. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js.map +1 -1
  206. package/core/dist/runtime-v2/tools/artificer-output-typebox.d.ts +3 -0
  207. package/core/dist/runtime-v2/tools/artificer-output-typebox.d.ts.map +1 -1
  208. package/core/dist/runtime-v2/tools/artificer-output-typebox.js +3 -0
  209. package/core/dist/runtime-v2/tools/artificer-output-typebox.js.map +1 -1
  210. package/core/package.json +4 -0
  211. package/package.json +1 -1
  212. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +74 -3
  213. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -1
  214. package/pd-cli/dist/commands/intent.d.ts +21 -4
  215. package/pd-cli/dist/commands/intent.d.ts.map +1 -1
  216. package/pd-cli/dist/commands/intent.js +88 -27
  217. package/pd-cli/dist/commands/intent.js.map +1 -1
  218. package/plugin/dist/commands/pain.js +2 -2
  219. package/plugin/dist/core/behavior-example-pack-assembler.d.ts +43 -0
  220. package/plugin/dist/core/behavior-example-pack-assembler.js +247 -0
  221. package/plugin/dist/core/intent-doc-reader-adapter.d.ts +13 -5
  222. package/plugin/dist/core/intent-doc-reader-adapter.js +25 -5
  223. package/plugin/dist/core/intent-doc-reader.d.ts +13 -4
  224. package/plugin/dist/core/intent-doc-reader.js +45 -24
  225. package/plugin/dist/core/rule-context-assembler.d.ts +45 -0
  226. package/plugin/dist/core/rule-context-assembler.js +148 -0
  227. package/plugin/dist/core/thinking-models.d.ts +12 -57
  228. package/plugin/dist/core/thinking-models.js +18 -224
  229. package/plugin/dist/core/trajectory-types.d.ts +18 -0
  230. package/plugin/dist/core/trajectory.d.ts +34 -2
  231. package/plugin/dist/core/trajectory.js +103 -0
  232. package/plugin/dist/hooks/gate.js +59 -2
  233. package/plugin/dist/hooks/pain.js +2 -2
  234. package/plugin/dist/hooks/prompt.js +2 -1
  235. package/plugin/dist/index.js +1 -1
  236. package/plugin/package.json +1 -1
  237. package/plugin/dist/core/evolution-migration.d.ts +0 -5
  238. package/plugin/dist/core/evolution-migration.js +0 -65
  239. package/plugin/dist/core/risk-calculator.d.ts +0 -22
  240. package/plugin/dist/core/risk-calculator.js +0 -88
  241. package/plugin/dist/core/rule-host-helpers.d.ts +0 -8
  242. package/plugin/dist/core/rule-host-helpers.js +0 -7
  243. package/plugin/dist/core/rule-host-types.d.ts +0 -7
  244. package/plugin/dist/core/rule-host-types.js +0 -7
  245. package/plugin/dist/core/schema/db-types.d.ts +0 -11
  246. package/plugin/dist/core/schema/db-types.js +0 -5
  247. package/plugin/dist/core/schema/index.d.ts +0 -17
  248. package/plugin/dist/core/schema/index.js +0 -15
  249. package/plugin/dist/core/schema/migration-runner.d.ts +0 -53
  250. package/plugin/dist/core/schema/migration-runner.js +0 -170
  251. package/plugin/dist/core/schema/migrations/001-init-trajectory.d.ts +0 -6
  252. package/plugin/dist/core/schema/migrations/001-init-trajectory.js +0 -190
  253. package/plugin/dist/core/schema/migrations/002-init-central.d.ts +0 -5
  254. package/plugin/dist/core/schema/migrations/002-init-central.js +0 -108
  255. package/plugin/dist/core/schema/migrations/003-init-workflow.d.ts +0 -5
  256. package/plugin/dist/core/schema/migrations/003-init-workflow.js +0 -50
  257. package/plugin/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +0 -8
  258. package/plugin/dist/core/schema/migrations/004-add-thinking-and-gfi.js +0 -66
  259. package/plugin/dist/core/schema/migrations/index.d.ts +0 -16
  260. package/plugin/dist/core/schema/migrations/index.js +0 -27
  261. package/plugin/dist/core/schema/schema-definitions.d.ts +0 -46
  262. package/plugin/dist/core/schema/schema-definitions.js +0 -599
  263. package/plugin/scripts/db-migrate.mjs +0 -170
@@ -0,0 +1,449 @@
1
+ /**
2
+ * PRI-480 — Phase 1 Core ABI tests (rule-context-v2.ts)
3
+ *
4
+ * Strict TDD: this file was written BEFORE the implementation. It pins
5
+ * the public surface (types, sentinel, canonicalize, validators,
6
+ * computeBehaviorFacts) and the critical invariants from spec §4 +
7
+ * the ticket acceptance criteria (sections B–D, G).
8
+ *
9
+ * ERR coverage:
10
+ * - ERR-001 (unknown validation): every validator is fed hostile
11
+ * primitives (null, arrays, wrong types) and must reject them.
12
+ * - ERR-076 (structural validation): prototype-pollution keys
13
+ * (__proto__, constructor, prototype) are rejected by structure,
14
+ * independent of the host realm's prototype.
15
+ * - ERR-024 (real consumption): validators are exercised directly,
16
+ * not through a wrapper that hides failures.
17
+ */
18
+ import { describe, it, expect } from 'vitest';
19
+ import { canonicalizeToolKind, validateRuleToolCallRecord, validateRuleHistoryWindow, validateRuleBehaviorFacts, validateRuleContextV2, computeBehaviorFacts, UNAVAILABLE_RULE_CONTEXT, } from '../rule-context-v2.js';
20
+ // ── helpers ───────────────────────────────────────────────────────────────
21
+ function makeCall(overrides = {}) {
22
+ return {
23
+ sequenceId: 1,
24
+ toolName: 'read',
25
+ canonicalKind: 'read',
26
+ normalizedPath: 'src/a.ts',
27
+ paramsSummary: {},
28
+ outcome: 'success',
29
+ ...overrides,
30
+ };
31
+ }
32
+ function makeAvailableWindow(calls = []) {
33
+ return {
34
+ status: 'available',
35
+ truncated: false,
36
+ calls,
37
+ };
38
+ }
39
+ // ── A. canonicalizeToolKind — 20-case static alias table (spec §4.4) ───────
40
+ describe('PRI-480 canonicalizeToolKind — static alias table', () => {
41
+ const cases = [
42
+ ['read', 'read'],
43
+ ['read_file', 'read'],
44
+ ['read_many_files', 'read'],
45
+ ['grep', 'search'],
46
+ ['grep_search', 'search'],
47
+ ['search_file_content', 'search'],
48
+ ['glob', 'search'],
49
+ ['write', 'write'],
50
+ ['write_file', 'write'],
51
+ ['edit', 'write'],
52
+ ['edit_file', 'write'],
53
+ ['replace', 'write'],
54
+ ['apply_patch', 'write'],
55
+ ['bash', 'execute'],
56
+ ['exec', 'execute'],
57
+ ['execute', 'execute'],
58
+ ['run_shell_command', 'execute'],
59
+ ['sessions_spawn', 'agent'],
60
+ ['', 'other'],
61
+ ['some_unknown_tool_xyz', 'other'],
62
+ ];
63
+ it('covers the 20 required alias/unknown cases', () => {
64
+ expect(cases).toHaveLength(20);
65
+ });
66
+ for (const [input, expected] of cases) {
67
+ it(`canonicalizeToolKind(${JSON.stringify(input)}) → '${expected}'`, () => {
68
+ expect(canonicalizeToolKind(input)).toBe(expected);
69
+ });
70
+ }
71
+ it('returns "other" for non-string inputs (ERR-001: no as bypass)', () => {
72
+ expect(canonicalizeToolKind(null)).toBe('other');
73
+ expect(canonicalizeToolKind(undefined)).toBe('other');
74
+ expect(canonicalizeToolKind(123)).toBe('other');
75
+ expect(canonicalizeToolKind({ name: 'read' })).toBe('other');
76
+ expect(canonicalizeToolKind(['read'])).toBe('other');
77
+ });
78
+ it('returns "other" for inherited Object.prototype keys (ERR-076: no inherited-key leakage from TOOL_ALIAS)', () => {
79
+ expect(canonicalizeToolKind('__proto__')).toBe('other');
80
+ expect(canonicalizeToolKind('constructor')).toBe('other');
81
+ expect(canonicalizeToolKind('toString')).toBe('other');
82
+ expect(canonicalizeToolKind('hasOwnProperty')).toBe('other');
83
+ expect(canonicalizeToolKind('valueOf')).toBe('other');
84
+ });
85
+ });
86
+ // ── B. UNAVAILABLE_RULE_CONTEXT sentinel ─────────────────────────────────
87
+ describe('PRI-480 UNAVAILABLE_RULE_CONTEXT sentinel', () => {
88
+ it('has version=2', () => {
89
+ expect(UNAVAILABLE_RULE_CONTEXT.version).toBe(2);
90
+ });
91
+ it('declares history.status="unavailable"', () => {
92
+ expect(UNAVAILABLE_RULE_CONTEXT.history.status).toBe('unavailable');
93
+ });
94
+ it('declares facts.priorReadOfTarget="unknown" (unavailable invariant)', () => {
95
+ expect(UNAVAILABLE_RULE_CONTEXT.facts.priorReadOfTarget).toBe('unknown');
96
+ });
97
+ it('nulls every fact count when history is unavailable', () => {
98
+ const f = UNAVAILABLE_RULE_CONTEXT.facts;
99
+ expect(f.readCount).toBeNull();
100
+ expect(f.writeCount).toBeNull();
101
+ expect(f.uniqueWritePathCount).toBeNull();
102
+ expect(f.sameActionBlockCount).toBeNull();
103
+ });
104
+ it('has empty calls array (no fabricated history)', () => {
105
+ expect(UNAVAILABLE_RULE_CONTEXT.history.calls).toEqual([]);
106
+ });
107
+ it('is frozen (Object.isFrozen)', () => {
108
+ expect(Object.isFrozen(UNAVAILABLE_RULE_CONTEXT)).toBe(true);
109
+ });
110
+ it('is a valid RuleContextV2 per the canonical validator (self-consistency)', () => {
111
+ const result = validateRuleContextV2(UNAVAILABLE_RULE_CONTEXT);
112
+ expect(result.valid).toBe(true);
113
+ expect(result.errors).toEqual([]);
114
+ });
115
+ });
116
+ // ── C. validateRuleToolCallRecord — ERR-001 + ERR-076 ─────────────────────
117
+ describe('PRI-480 validateRuleToolCallRecord', () => {
118
+ it('accepts a well-formed record', () => {
119
+ expect(validateRuleToolCallRecord(makeCall()).valid).toBe(true);
120
+ });
121
+ it('accepts a record with normalizedPath=null', () => {
122
+ expect(validateRuleToolCallRecord(makeCall({ normalizedPath: null })).valid).toBe(true);
123
+ });
124
+ it('rejects non-object primitives (ERR-001)', () => {
125
+ expect(validateRuleToolCallRecord(null).valid).toBe(false);
126
+ expect(validateRuleToolCallRecord('read').valid).toBe(false);
127
+ expect(validateRuleToolCallRecord(42).valid).toBe(false);
128
+ });
129
+ it('rejects arrays (ERR-001)', () => {
130
+ expect(validateRuleToolCallRecord([]).valid).toBe(false);
131
+ });
132
+ it('rejects missing sequenceId', () => {
133
+ const { sequenceId: _omit, ...rest } = makeCall();
134
+ void _omit;
135
+ expect(validateRuleToolCallRecord(rest).valid).toBe(false);
136
+ });
137
+ it('rejects non-number sequenceId', () => {
138
+ expect(validateRuleToolCallRecord(makeCall({ sequenceId: '1' })).valid).toBe(false);
139
+ });
140
+ it('rejects missing toolName', () => {
141
+ const { toolName: _omit, ...rest } = makeCall();
142
+ void _omit;
143
+ expect(validateRuleToolCallRecord(rest).valid).toBe(false);
144
+ });
145
+ it('rejects empty-string toolName', () => {
146
+ expect(validateRuleToolCallRecord(makeCall({ toolName: '' })).valid).toBe(false);
147
+ });
148
+ it('rejects invalid canonicalKind enum', () => {
149
+ expect(validateRuleToolCallRecord(makeCall({ canonicalKind: 'fetch' })).valid).toBe(false);
150
+ });
151
+ it('rejects non-object normalizedPath', () => {
152
+ expect(validateRuleToolCallRecord(makeCall({ normalizedPath: 42 })).valid).toBe(false);
153
+ });
154
+ it('rejects paramsSummary that is not a plain object', () => {
155
+ expect(validateRuleToolCallRecord(makeCall({ paramsSummary: [] })).valid).toBe(false);
156
+ expect(validateRuleToolCallRecord(makeCall({ paramsSummary: null })).valid).toBe(false);
157
+ });
158
+ it('rejects invalid outcome enum', () => {
159
+ expect(validateRuleToolCallRecord(makeCall({ outcome: 'pending' })).valid).toBe(false);
160
+ });
161
+ it.each(['__proto__', 'constructor', 'prototype'])('rejects prototype-pollution own key %s (ERR-076)', (key) => {
162
+ const hostile = makeCall();
163
+ Object.defineProperty(hostile, key, {
164
+ value: 42,
165
+ enumerable: true,
166
+ configurable: true,
167
+ writable: true,
168
+ });
169
+ expect(validateRuleToolCallRecord(hostile).valid).toBe(false);
170
+ });
171
+ });
172
+ // ── D. validateRuleHistoryWindow ──────────────────────────────────────────
173
+ describe('PRI-480 validateRuleHistoryWindow', () => {
174
+ it('accepts a valid available window', () => {
175
+ expect(validateRuleHistoryWindow(makeAvailableWindow()).valid).toBe(true);
176
+ });
177
+ it('accepts a valid unavailable window with unavailableReason', () => {
178
+ expect(validateRuleHistoryWindow({
179
+ status: 'unavailable',
180
+ unavailableReason: 'db locked',
181
+ truncated: false,
182
+ calls: [],
183
+ }).valid).toBe(true);
184
+ });
185
+ it('rejects invalid status enum', () => {
186
+ expect(validateRuleHistoryWindow({ status: 'pending', truncated: false, calls: [] })
187
+ .valid).toBe(false);
188
+ });
189
+ it('rejects non-boolean truncated', () => {
190
+ expect(validateRuleHistoryWindow({ status: 'available', truncated: 'no', calls: [] })
191
+ .valid).toBe(false);
192
+ });
193
+ it('rejects non-array calls', () => {
194
+ expect(validateRuleHistoryWindow({ status: 'available', truncated: false, calls: {} })
195
+ .valid).toBe(false);
196
+ });
197
+ it('rejects when any call element is invalid', () => {
198
+ const window = makeAvailableWindow([
199
+ makeCall(),
200
+ { sequenceId: 'bad' },
201
+ ]);
202
+ expect(validateRuleHistoryWindow(window).valid).toBe(false);
203
+ });
204
+ });
205
+ // ── E. validateRuleBehaviorFacts ──────────────────────────────────────────
206
+ describe('PRI-480 validateRuleBehaviorFacts', () => {
207
+ function makeFacts(overrides = {}) {
208
+ return {
209
+ priorReadOfTarget: 'yes',
210
+ readCount: 2,
211
+ writeCount: 1,
212
+ uniqueWritePathCount: 1,
213
+ sameActionBlockCount: 0,
214
+ ...overrides,
215
+ };
216
+ }
217
+ it('accepts well-formed facts', () => {
218
+ expect(validateRuleBehaviorFacts(makeFacts()).valid).toBe(true);
219
+ });
220
+ it('accepts null counts (unavailable posture)', () => {
221
+ expect(validateRuleBehaviorFacts({
222
+ priorReadOfTarget: 'unknown',
223
+ readCount: null,
224
+ writeCount: null,
225
+ uniqueWritePathCount: null,
226
+ sameActionBlockCount: null,
227
+ }).valid).toBe(true);
228
+ });
229
+ it('rejects invalid priorReadOfTarget enum', () => {
230
+ expect(validateRuleBehaviorFacts(makeFacts({ priorReadOfTarget: 'maybe' })).valid).toBe(false);
231
+ });
232
+ it('rejects non-number non-null readCount', () => {
233
+ expect(validateRuleBehaviorFacts(makeFacts({ readCount: '2' })).valid).toBe(false);
234
+ });
235
+ it('rejects NaN readCount', () => {
236
+ expect(validateRuleBehaviorFacts(makeFacts({ readCount: NaN })).valid).toBe(false);
237
+ });
238
+ it('rejects negative writeCount', () => {
239
+ expect(validateRuleBehaviorFacts(makeFacts({ writeCount: -1 })).valid).toBe(false);
240
+ });
241
+ });
242
+ // ── F. validateRuleContextV2 + unavailable invariant (acceptance C) ───────
243
+ describe('PRI-480 validateRuleContextV2 — unavailable invariant (acceptance C)', () => {
244
+ function buildContext(overrides = {}) {
245
+ return {
246
+ version: 2,
247
+ history: {
248
+ status: 'available',
249
+ truncated: false,
250
+ calls: [],
251
+ },
252
+ facts: {
253
+ priorReadOfTarget: 'no',
254
+ readCount: 0,
255
+ writeCount: 0,
256
+ uniqueWritePathCount: 0,
257
+ sameActionBlockCount: 0,
258
+ },
259
+ ...overrides,
260
+ };
261
+ }
262
+ it('accepts a well-formed available context', () => {
263
+ expect(validateRuleContextV2(buildContext()).valid).toBe(true);
264
+ });
265
+ it('accepts the canonical unavailable posture (all counts null, priorRead=unknown)', () => {
266
+ expect(validateRuleContextV2(UNAVAILABLE_RULE_CONTEXT).valid).toBe(true);
267
+ });
268
+ it('requires version === 2', () => {
269
+ expect(validateRuleContextV2(buildContext({ version: 1 })).valid).toBe(false);
270
+ });
271
+ it('rejects when history.status=unavailable but priorReadOfTarget !== "unknown"', () => {
272
+ const ctx = buildContext({
273
+ history: { status: 'unavailable', truncated: false, calls: [] },
274
+ facts: {
275
+ priorReadOfTarget: 'no',
276
+ readCount: null,
277
+ writeCount: null,
278
+ uniqueWritePathCount: null,
279
+ sameActionBlockCount: null,
280
+ },
281
+ });
282
+ expect(validateRuleContextV2(ctx).valid).toBe(false);
283
+ });
284
+ it('rejects when history.status=unavailable but readCount is non-null', () => {
285
+ const ctx = buildContext({
286
+ history: { status: 'unavailable', truncated: false, calls: [] },
287
+ facts: {
288
+ priorReadOfTarget: 'unknown',
289
+ readCount: 3,
290
+ writeCount: null,
291
+ uniqueWritePathCount: null,
292
+ sameActionBlockCount: null,
293
+ },
294
+ });
295
+ expect(validateRuleContextV2(ctx).valid).toBe(false);
296
+ });
297
+ it('rejects when history.status=unavailable but writeCount is non-null', () => {
298
+ const ctx = buildContext({
299
+ history: { status: 'unavailable', truncated: false, calls: [] },
300
+ facts: {
301
+ priorReadOfTarget: 'unknown',
302
+ readCount: null,
303
+ writeCount: 0,
304
+ uniqueWritePathCount: null,
305
+ sameActionBlockCount: null,
306
+ },
307
+ });
308
+ expect(validateRuleContextV2(ctx).valid).toBe(false);
309
+ });
310
+ it('rejects when history.status=unavailable but sameActionBlockCount is non-null', () => {
311
+ const ctx = buildContext({
312
+ history: { status: 'unavailable', truncated: false, calls: [] },
313
+ facts: {
314
+ priorReadOfTarget: 'unknown',
315
+ readCount: null,
316
+ writeCount: null,
317
+ uniqueWritePathCount: null,
318
+ sameActionBlockCount: 0,
319
+ },
320
+ });
321
+ expect(validateRuleContextV2(ctx).valid).toBe(false);
322
+ });
323
+ it('rejects when sub-validators fail (invalid history.status)', () => {
324
+ const ctx = buildContext({
325
+ history: { status: 'broken', truncated: false, calls: [] },
326
+ });
327
+ expect(validateRuleContextV2(ctx).valid).toBe(false);
328
+ });
329
+ });
330
+ // ── G. computeBehaviorFacts — exact-match prior read + counting ──────────
331
+ describe('PRI-480 computeBehaviorFacts — acceptance D', () => {
332
+ it('returns priorReadOfTarget="yes" when a prior read hit the exact target path', () => {
333
+ const window = makeAvailableWindow([
334
+ makeCall({ canonicalKind: 'read', normalizedPath: 'src/a.ts', sequenceId: 1 }),
335
+ ]);
336
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
337
+ expect(facts.priorReadOfTarget).toBe('yes');
338
+ });
339
+ it('returns priorReadOfTarget="no" when target was never read', () => {
340
+ const window = makeAvailableWindow([
341
+ makeCall({ canonicalKind: 'read', normalizedPath: 'src/other.ts', sequenceId: 1 }),
342
+ ]);
343
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
344
+ expect(facts.priorReadOfTarget).toBe('no');
345
+ });
346
+ it('DOES NOT substring-match: src/a.ts.bak must NOT count as a read of src/a.ts', () => {
347
+ const window = makeAvailableWindow([
348
+ makeCall({ canonicalKind: 'read', normalizedPath: 'src/a.ts.bak', sequenceId: 1 }),
349
+ ]);
350
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
351
+ expect(facts.priorReadOfTarget).toBe('no');
352
+ });
353
+ it('DOES NOT substring-match in the other direction either (target is the longer path)', () => {
354
+ const window = makeAvailableWindow([
355
+ makeCall({ canonicalKind: 'read', normalizedPath: 'src/a.ts', sequenceId: 1 }),
356
+ ]);
357
+ const facts = computeBehaviorFacts(window, 'src/a.ts.bak', 0);
358
+ expect(facts.priorReadOfTarget).toBe('no');
359
+ });
360
+ it('does NOT count a write hit on the target path as a prior read', () => {
361
+ const window = makeAvailableWindow([
362
+ makeCall({ canonicalKind: 'write', normalizedPath: 'src/a.ts', sequenceId: 1 }),
363
+ ]);
364
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
365
+ expect(facts.priorReadOfTarget).toBe('no');
366
+ });
367
+ it('counts search canonicalKind as a prior read of the target path', () => {
368
+ const window = makeAvailableWindow([
369
+ makeCall({ canonicalKind: 'search', normalizedPath: 'src/a.ts', sequenceId: 1 }),
370
+ ]);
371
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
372
+ expect(facts.priorReadOfTarget).toBe('yes');
373
+ });
374
+ it('does NOT count execute/agent/other canonicalKind as a prior read', () => {
375
+ for (const kind of ['execute', 'agent', 'other']) {
376
+ const window = makeAvailableWindow([
377
+ makeCall({ canonicalKind: kind, normalizedPath: 'src/a.ts', sequenceId: 1 }),
378
+ ]);
379
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
380
+ expect(facts.priorReadOfTarget).toBe('no');
381
+ }
382
+ });
383
+ it('returns priorReadOfTarget="unknown" when targetPath is null', () => {
384
+ const window = makeAvailableWindow([
385
+ makeCall({ canonicalKind: 'read', normalizedPath: 'src/a.ts', sequenceId: 1 }),
386
+ ]);
387
+ const facts = computeBehaviorFacts(window, null, 0);
388
+ expect(facts.priorReadOfTarget).toBe('unknown');
389
+ });
390
+ it('counts readCount = number of read/search canonicalKind calls', () => {
391
+ const window = makeAvailableWindow([
392
+ makeCall({ canonicalKind: 'read', sequenceId: 1 }),
393
+ makeCall({ canonicalKind: 'search', sequenceId: 2 }),
394
+ makeCall({ canonicalKind: 'write', sequenceId: 3 }),
395
+ makeCall({ canonicalKind: 'execute', sequenceId: 4 }),
396
+ ]);
397
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
398
+ expect(facts.readCount).toBe(2);
399
+ });
400
+ it('counts writeCount = number of write canonicalKind calls', () => {
401
+ const window = makeAvailableWindow([
402
+ makeCall({ canonicalKind: 'write', sequenceId: 1 }),
403
+ makeCall({ canonicalKind: 'write', sequenceId: 2 }),
404
+ makeCall({ canonicalKind: 'read', sequenceId: 3 }),
405
+ ]);
406
+ const facts = computeBehaviorFacts(window, null, 0);
407
+ expect(facts.writeCount).toBe(2);
408
+ });
409
+ it('dedupes uniqueWritePathCount by normalized path', () => {
410
+ const window = makeAvailableWindow([
411
+ makeCall({ canonicalKind: 'write', normalizedPath: 'src/a.ts', sequenceId: 1 }),
412
+ makeCall({ canonicalKind: 'write', normalizedPath: 'src/a.ts', sequenceId: 2 }),
413
+ makeCall({ canonicalKind: 'write', normalizedPath: 'src/b.ts', sequenceId: 3 }),
414
+ makeCall({ canonicalKind: 'write', normalizedPath: null, sequenceId: 4 }),
415
+ ]);
416
+ const facts = computeBehaviorFacts(window, null, 0);
417
+ expect(facts.uniqueWritePathCount).toBe(2);
418
+ });
419
+ it('echoes sameActionBlockCount back unchanged', () => {
420
+ const window = makeAvailableWindow([]);
421
+ expect(computeBehaviorFacts(window, null, 0).sameActionBlockCount).toBe(0);
422
+ expect(computeBehaviorFacts(window, null, 3).sameActionBlockCount).toBe(3);
423
+ });
424
+ it('returns the all-null unavailable posture when window.status=unavailable', () => {
425
+ const window = {
426
+ status: 'unavailable',
427
+ unavailableReason: 'db locked',
428
+ truncated: false,
429
+ calls: [],
430
+ };
431
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 2);
432
+ expect(facts.priorReadOfTarget).toBe('unknown');
433
+ expect(facts.readCount).toBeNull();
434
+ expect(facts.writeCount).toBeNull();
435
+ expect(facts.uniqueWritePathCount).toBeNull();
436
+ expect(facts.sameActionBlockCount).toBeNull();
437
+ });
438
+ });
439
+ // ── H. computeBehaviorFacts ignores calls with null paths for prior-read ─
440
+ describe('PRI-480 computeBehaviorFacts — null-path calls', () => {
441
+ it('does not crash and reports "no" when all reads have null paths', () => {
442
+ const window = makeAvailableWindow([
443
+ makeCall({ canonicalKind: 'read', normalizedPath: null, sequenceId: 1 }),
444
+ ]);
445
+ const facts = computeBehaviorFacts(window, 'src/a.ts', 0);
446
+ expect(facts.priorReadOfTarget).toBe('no');
447
+ });
448
+ });
449
+ //# sourceMappingURL=rule-context-v2.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-context-v2.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/rule-context-v2.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"adversarial-case.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/adversarial-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,oBAAoB,CAAC;AAS5F,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAMpD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,2BAA2B,CAyDzF"}
1
+ {"version":3,"file":"adversarial-case.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/adversarial-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,oBAAoB,CAAC;AAW5F,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcpD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,2BAA2B,CA0EzF"}
@@ -1,3 +1,4 @@
1
+ import { validateRuleContextV2 } from './rule-context-v2.js';
1
2
  const ADVERSARIAL_ATTACK_TYPES = new Set(['boundary', 'omission', 'inversion']);
2
3
  const GOLDEN_TRACE_DECISIONS = new Set(['allow', 'block', 'propose_correction']);
3
4
  function isGoldenTraceDecision(v) {
@@ -6,6 +7,13 @@ function isGoldenTraceDecision(v) {
6
7
  function isRecord(v) {
7
8
  return v !== null && typeof v === 'object' && !Array.isArray(v);
8
9
  }
10
+ /**
11
+ * Type guard for RuleContextV2 (PRI-485 Phase 6). Wraps validateRuleContextV2
12
+ * so callers can narrow `unknown` to `RuleContextV2` without `as` (rc-2).
13
+ */
14
+ function isRuleContextV2(value) {
15
+ return validateRuleContextV2(value).valid;
16
+ }
9
17
  /**
10
18
  * Convert AdversarialCase[] (all attacks, all negative) into a GoldenTrace.
11
19
  *
@@ -47,6 +55,21 @@ export function adversarialCasesToGoldenTrace(cases) {
47
55
  if (!Object.hasOwn(entry, 'rationale') || typeof entry.rationale !== 'string' || entry.rationale.trim() === '') {
48
56
  return { ok: false, reason: `${prefix}.rationale must be a non-empty string` };
49
57
  }
58
+ // PRI-485 Phase 6: preserve optional ruleContext on the converted
59
+ // GoldenTraceCase so the sandbox receives the fabricated v2 context.
60
+ // The field is optional on both AdversarialCase and GoldenTraceCase;
61
+ // absence is fine (v1 backward compat). When present, re-validate it
62
+ // here (Runtime Contract Rule 1/2 — adversarial-case.ts is a pure
63
+ // function and cannot assume the upstream Evaluator validator already
64
+ // ran). A malformed ruleContext fails the whole conversion loud.
65
+ let ruleContext;
66
+ if (Object.hasOwn(entry, 'ruleContext') && entry.ruleContext !== undefined) {
67
+ const { ruleContext: rawCtx } = entry;
68
+ if (rawCtx === undefined || !isRuleContextV2(rawCtx)) {
69
+ return { ok: false, reason: `${prefix}.ruleContext invalid: failed validateRuleContextV2` };
70
+ }
71
+ ruleContext = rawCtx;
72
+ }
50
73
  mappedCases.push({
51
74
  caseId: entry.caseId,
52
75
  // All adversarial cases are attacks → negative expectations.
@@ -55,6 +78,7 @@ export function adversarialCasesToGoldenTrace(cases) {
55
78
  params: entry.params,
56
79
  // Narrowed by isGoldenTraceDecision above (Runtime Contract Rule 2).
57
80
  expectedDecision: entry.expectedDecision,
81
+ ...(ruleContext !== undefined ? { ruleContext } : {}),
58
82
  });
59
83
  }
60
84
  const trace = {
@@ -1 +1 @@
1
- {"version":3,"file":"adversarial-case.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/adversarial-case.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adversarial-case.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/adversarial-case.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACrG,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAEtG,SAAS,qBAAqB,CAAC,CAAS;IACtC,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAMD,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,oBAAoB,KAAK,GAAG,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACtG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,oCAAoC,EAAE,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACnI,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,+DAA+D,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnI,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5G,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,sCAAsC,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,2BAA2B,EAAE,CAAC;QACrE,CAAC;QACD,IACE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC;eACtC,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ;eAC1C,CAAC,qBAAqB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EACjD,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,wEAAwE,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;QAClJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/G,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,uCAAuC,EAAE,CAAC;QACjF,CAAC;QAED,kEAAkE;QAClE,qEAAqE;QACrE,qEAAqE;QACrE,qEAAqE;QACrE,kEAAkE;QAClE,sEAAsE;QACtE,iEAAiE;QACjE,IAAI,WAAsC,CAAC;QAC3C,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC3E,MAAM,EAAC,WAAW,EAAE,MAAM,EAAC,GAAG,KAAK,CAAC;YACpC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,oDAAoD,EAAE,CAAC;YAC9F,CAAC;YACD,WAAW,GAAG,MAAM,CAAC;QACvB,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,6DAA6D;YAC7D,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,qEAAqE;YACrE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAgB;QACzB,OAAO,EAAE,4BAA4B,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAC9D,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,WAAW;KACnB,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type Static } from '@sinclair/typebox';
2
2
  import type { GoldenTraceDecision } from '../golden-trace.js';
3
+ import type { RuleContextV2 } from './rule-context-v2.js';
3
4
  /**
4
5
  * Artificer source trace — lineage back to upstream peer artifacts.
5
6
  */
@@ -25,6 +26,7 @@ export interface GoldenTraceCaseInput {
25
26
  readonly expectedDecision: GoldenTraceDecision;
26
27
  readonly expectedProposedParams?: Record<string, unknown>;
27
28
  readonly expectedApplicationMode?: 'shadow' | 'live';
29
+ readonly ruleContext?: RuleContextV2;
28
30
  }
29
31
  /**
30
32
  * ArtificerRuleOutput — the UNIFIED Artificer output (PRI-439).
@@ -36,6 +38,11 @@ export interface GoldenTraceCaseInput {
36
38
  *
37
39
  * `meta`, `taskId`, lineage, and `generatedAt` are server-injected / model-filled
38
40
  * per the existing contract; the validator enforces their presence and consistency.
41
+ *
42
+ * PRI-484 (Phase 5): `requiresContextVersion?: 2` declares a v2 rule that may
43
+ * inspect `input.context` and may carry `ruleContext` on its golden trace cases.
44
+ * When absent, the rule is v1 and MUST NOT read input.context (validator rejects
45
+ * any case-level ruleContext on a v1 rule).
39
46
  */
40
47
  export interface ArtificerRuleOutput {
41
48
  readonly taskId: string;
@@ -47,6 +54,8 @@ export interface ArtificerRuleOutput {
47
54
  readonly risks: readonly string[];
48
55
  readonly sourceTrace: ArtificerSourceTrace;
49
56
  readonly generatedAt: string;
57
+ /** PRI-484 — declare v2 rule that reads input.context. Only `2` is supported. */
58
+ readonly requiresContextVersion?: 2;
50
59
  }
51
60
  export declare const ArtificerSourceTraceSchema: import("@sinclair/typebox").TObject<{
52
61
  scribeArtifactId: import("@sinclair/typebox").TString;
@@ -75,6 +84,7 @@ export declare const ArtificerRuleOutputSchema: import("@sinclair/typebox").TObj
75
84
  dreamerArtifactId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
76
85
  }>;
77
86
  generatedAt: import("@sinclair/typebox").TString;
87
+ requiresContextVersion: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<2>>;
78
88
  }>;
79
89
  export type ArtificerRuleOutputTB = Static<typeof ArtificerRuleOutputSchema>;
80
90
  export interface ArtificerValidationResult {
@@ -1 +1 @@
1
- {"version":3,"file":"artificer-output.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/artificer-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,uBAAuB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACtD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;EAyBpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACxH;AA0GD,qBAAa,yBAA0B,YAAW,kBAAkB;IAE5D,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA8F7H"}
1
+ {"version":3,"file":"artificer-output.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/artificer-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,uBAAuB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;CACtC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;EA2BpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACxH;AA0GD,qBAAa,yBAA0B,YAAW,kBAAkB;IAE5D,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA8I7H"}