@aiwg/cli 2026.9.21 → 2026.10.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 (210) hide show
  1. package/agentic/code/providers/capability-matrix.yaml +2 -1
  2. package/dist/src/artifacts/cli.js +23 -18
  3. package/dist/src/artifacts/discovery-shadow-evaluator.js +177 -0
  4. package/dist/src/artifacts/discovery-shadow.js +195 -0
  5. package/dist/src/artifacts/fortemi-core-query-adapter.js +6 -2
  6. package/dist/src/artifacts/index-builder.js +47 -9
  7. package/dist/src/artifacts/query-engine.js +108 -5
  8. package/dist/src/artifacts/types.js +1 -0
  9. package/dist/src/cli/handlers/decision.js +88 -0
  10. package/dist/src/cli/handlers/gates.js +154 -0
  11. package/dist/src/cli/handlers/index.js +5 -1
  12. package/dist/src/cli/handlers/sessions.js +10 -7
  13. package/dist/src/cli/handlers/utilities.js +20 -0
  14. package/dist/src/config/aiwg-config.js +15 -2
  15. package/dist/src/decision/acceptance.js +25 -0
  16. package/dist/src/decision/adapters/jev.js +24 -2
  17. package/dist/src/decision/calibration/registry.js +9 -0
  18. package/dist/src/decision/compose.js +74 -15
  19. package/dist/src/decision/context-live-promotion.js +344 -0
  20. package/dist/src/decision/context-live-qualification.js +591 -0
  21. package/dist/src/decision/context-pruning.js +847 -0
  22. package/dist/src/decision/driver.js +430 -0
  23. package/dist/src/decision/egress-live-qualification.js +874 -0
  24. package/dist/src/decision/ensemble/contract.js +64 -1
  25. package/dist/src/decision/ensemble/index.js +1 -0
  26. package/dist/src/decision/ensemble/report.js +8 -42
  27. package/dist/src/decision/ensemble/runtime.js +571 -0
  28. package/dist/src/decision/ensemble-study/artifacts.js +85 -0
  29. package/dist/src/decision/ensemble-study/calibration.js +443 -0
  30. package/dist/src/decision/ensemble-study/corpus.js +229 -0
  31. package/dist/src/decision/ensemble-study/multifact-artifacts.js +23 -0
  32. package/dist/src/decision/ensemble-study/multifact-study.js +596 -0
  33. package/dist/src/decision/ensemble-study/multifact.js +241 -0
  34. package/dist/src/decision/ensemble-study/protocol.js +77 -0
  35. package/dist/src/decision/ensemble-study/score.js +462 -0
  36. package/dist/src/decision/ensemble-study/staged.js +87 -0
  37. package/dist/src/decision/ensemble-study/statistics.js +84 -0
  38. package/dist/src/decision/evaluate.js +227 -14
  39. package/dist/src/decision/export.js +4 -0
  40. package/dist/src/decision/feature-export.js +1074 -0
  41. package/dist/src/decision/graph-index.js +16 -0
  42. package/dist/src/decision/graph-live-qualification.js +1041 -0
  43. package/dist/src/decision/graph-live-workload.js +245 -0
  44. package/dist/src/decision/graph-skill-bridge.js +21 -3
  45. package/dist/src/decision/heldout/calibration.js +140 -0
  46. package/dist/src/decision/heldout/collector.js +430 -0
  47. package/dist/src/decision/heldout/contract.js +309 -0
  48. package/dist/src/decision/heldout/d29-generator-ids.js +12 -0
  49. package/dist/src/decision/heldout/d29-passage-baseline-v2.js +93 -0
  50. package/dist/src/decision/heldout/d29-passage-baseline-v3.js +100 -0
  51. package/dist/src/decision/heldout/d29-passage-baseline.js +66 -0
  52. package/dist/src/decision/heldout/d29-pools-v8.js +575 -0
  53. package/dist/src/decision/heldout/d29-pools.js +288 -0
  54. package/dist/src/decision/heldout/d29-v6.js +169 -0
  55. package/dist/src/decision/heldout/d29-v7.js +202 -0
  56. package/dist/src/decision/heldout/d29-v8.js +586 -0
  57. package/dist/src/decision/heldout/generator-registry.js +67 -0
  58. package/dist/src/decision/heldout/generators.js +696 -0
  59. package/dist/src/decision/heldout/index.js +8 -0
  60. package/dist/src/decision/heldout/journal.js +346 -0
  61. package/dist/src/decision/heldout/study-generators.js +64 -0
  62. package/dist/src/decision/heldout/types.js +2 -0
  63. package/dist/src/decision/host-policy.js +61 -0
  64. package/dist/src/decision/index.js +11 -0
  65. package/dist/src/decision/interop-profile.v1.json +112 -0
  66. package/dist/src/decision/interop.js +653 -0
  67. package/dist/src/decision/issue-triage/index.js +3 -0
  68. package/dist/src/decision/issue-triage/runtime.js +1069 -0
  69. package/dist/src/decision/issue-triage/types.js +2 -0
  70. package/dist/src/decision/patterns/catalog.js +28 -8
  71. package/dist/src/decision/patterns/playground.js +28 -11
  72. package/dist/src/decision/patterns/specs.js +19 -10
  73. package/dist/src/decision/preprocessed-evidence.js +724 -0
  74. package/dist/src/decision/qualification/capture.js +8 -2
  75. package/dist/src/decision/qualification/gate-evidence.js +19 -4
  76. package/dist/src/decision/qualification/load.js +8 -1
  77. package/dist/src/decision/qualification/quality.js +57 -49
  78. package/dist/src/decision/qualification/release.js +76 -3
  79. package/dist/src/decision/qualification/runner.js +5 -2
  80. package/dist/src/decision/routing/contract.js +175 -0
  81. package/dist/src/decision/routing/index.js +5 -0
  82. package/dist/src/decision/routing/report.js +216 -0
  83. package/dist/src/decision/routing/runtime.js +685 -0
  84. package/dist/src/decision/routing/types.js +2 -0
  85. package/dist/src/decision/sdlc-screening.js +1157 -0
  86. package/dist/src/decision/sensitivity/comparative.js +154 -0
  87. package/dist/src/decision/sensitivity/contract.js +218 -0
  88. package/dist/src/decision/sensitivity/index.js +5 -0
  89. package/dist/src/decision/sensitivity/runtime.js +912 -0
  90. package/dist/src/decision/sensitivity/types.js +2 -0
  91. package/dist/src/decision/validate.js +26 -0
  92. package/dist/src/extensions/commands/definitions.js +38 -0
  93. package/dist/src/extensions/manifest.js +44 -0
  94. package/dist/src/gates/discovery.js +315 -0
  95. package/dist/src/gates/driver.js +388 -0
  96. package/dist/src/gates/evaluate.js +719 -0
  97. package/dist/src/gates/floors.js +255 -0
  98. package/dist/src/gates/index.js +17 -0
  99. package/dist/src/gates/providers/evidence.js +38 -0
  100. package/dist/src/gates/providers/index.js +21 -0
  101. package/dist/src/gates/providers/isolated-child-source.js +446 -0
  102. package/dist/src/gates/providers/loader.js +1069 -0
  103. package/dist/src/gates/providers/paired.js +52 -0
  104. package/dist/src/gates/providers/proportion.js +60 -0
  105. package/dist/src/gates/providers/registry.js +40 -0
  106. package/dist/src/gates/providers/scalar.js +41 -0
  107. package/dist/src/gates/providers/screening.js +53 -0
  108. package/dist/src/gates/providers/types.js +25 -0
  109. package/dist/src/gates/registry.js +1003 -0
  110. package/dist/src/gates/report.js +102 -0
  111. package/dist/src/gates/schema.js +56 -0
  112. package/dist/src/gates/stats/binomial.js +26 -0
  113. package/dist/src/gates/stats/bootstrap.js +62 -0
  114. package/dist/src/gates/stats/clopper-pearson.js +95 -0
  115. package/dist/src/gates/stats/digest.js +26 -0
  116. package/dist/src/gates/stats/error.js +5 -0
  117. package/dist/src/gates/stats/index.js +9 -0
  118. package/dist/src/gates/stats/normal.js +35 -0
  119. package/dist/src/gates/stats/paired.js +120 -0
  120. package/dist/src/gates/stats/splits.js +30 -0
  121. package/dist/src/gates/types.js +8 -0
  122. package/dist/src/governance/redaction.js +14 -4
  123. package/dist/src/mcp/muse-native-config.mjs +123 -0
  124. package/dist/src/mcp/tools/decision.mjs +188 -0
  125. package/dist/src/mcp/tools/subsystems.mjs +2 -0
  126. package/dist/src/providers/capability-matrix.yaml +2 -1
  127. package/dist/src/providers/provider-definitions.js +2 -1
  128. package/dist/src/sessions/adapters/muse.js +336 -39
  129. package/dist/src/sessions/batch-import.js +7 -0
  130. package/dist/src/sessions/workspace-discovery.js +13 -2
  131. package/package.json +1 -1
  132. package/schemas/decision/ConformalFrozenOpenData.v2.schema.json +371 -0
  133. package/schemas/decision/ConformalOpenDataReport.v2.schema.json +421 -0
  134. package/schemas/decision/ConformalPreregistration.v2.schema.json +529 -0
  135. package/schemas/decision/ContextPruningCandidate.v1.schema.json +47 -0
  136. package/schemas/decision/ContextPruningEvaluationReport.v1.schema.json +758 -0
  137. package/schemas/decision/ContextPruningPreregistration.v1.schema.json +175 -0
  138. package/schemas/decision/ContextPruningReceipt.v1.schema.json +72 -0
  139. package/schemas/decision/D17Multifact.v1.schema.json +1851 -0
  140. package/schemas/decision/D17StudyAnalysis.v1.schema.json +42 -0
  141. package/schemas/decision/D17StudyAnalysis.v2.schema.json +51 -0
  142. package/schemas/decision/D17StudyCalibration.v1.schema.json +819 -0
  143. package/schemas/decision/D17StudyDryRun.v1.schema.json +169 -0
  144. package/schemas/decision/D17StudyDryRun.v2.schema.json +239 -0
  145. package/schemas/decision/D17StudyGold.v1.schema.json +108 -0
  146. package/schemas/decision/D17StudyGuide.v1.schema.json +63 -0
  147. package/schemas/decision/D17StudyNativeTemplates.v1.schema.json +619 -0
  148. package/schemas/decision/D17StudyProtocol.v1.schema.json +241 -0
  149. package/schemas/decision/D17StudyReport.v1.schema.json +902 -0
  150. package/schemas/decision/D17StudyReport.v2.schema.json +1319 -0
  151. package/schemas/decision/D17StudyReview.v1.schema.json +175 -0
  152. package/schemas/decision/D17StudySplits.v1.schema.json +217 -0
  153. package/schemas/decision/D29Study.v1.schema.json +1903 -0
  154. package/schemas/decision/D29Study.v2.schema.json +1344 -0
  155. package/schemas/decision/D29Study.v3.schema.json +609 -0
  156. package/schemas/decision/D29Study.v4.schema.json +1133 -0
  157. package/schemas/decision/D29Study.v6.schema.json +1205 -0
  158. package/schemas/decision/D29Study.v7.schema.json +1471 -0
  159. package/schemas/decision/D29Study.v8.schema.json +671 -0
  160. package/schemas/decision/D29Study.v9.schema.json +778 -0
  161. package/schemas/decision/DecisionComparativeReplayAuditSample.v1.schema.json +137 -0
  162. package/schemas/decision/DecisionComparativeReplayCorpus.v1.schema.json +258 -0
  163. package/schemas/decision/DecisionComparativeReplayFreeze.v1.schema.json +74 -0
  164. package/schemas/decision/DecisionComparativeReplayGold.v1.schema.json +50 -0
  165. package/schemas/decision/DecisionComparativeReplayGoldAsset.v1.schema.json +37 -0
  166. package/schemas/decision/DecisionComparativeReplayIntegrity.v1.schema.json +81 -0
  167. package/schemas/decision/DecisionComparativeReplayMembers.v1.schema.json +52 -0
  168. package/schemas/decision/DecisionComparativeReplayPreregistration.v1.schema.json +113 -0
  169. package/schemas/decision/DecisionComparativeReplayReport.v1.schema.json +407 -0
  170. package/schemas/decision/DecisionComparativeReplayReviewPackets.v1.schema.json +260 -0
  171. package/schemas/decision/DecisionComparativeReplaySplit.v1.schema.json +84 -0
  172. package/schemas/decision/DecisionFeatureObservation.v1.schema.json +564 -0
  173. package/schemas/decision/DecisionFeatureSet.v1.schema.json +155 -0
  174. package/schemas/decision/DecisionInteropMapping.v1.schema.json +85 -0
  175. package/schemas/decision/DecisionIssueTriageEvaluationManifest.v1.schema.json +174 -0
  176. package/schemas/decision/DecisionIssueTriageEvaluationReport.v1.schema.json +280 -0
  177. package/schemas/decision/DecisionIssueTriagePilotPack.v1.schema.json +114 -0
  178. package/schemas/decision/DecisionRouteReceipt.v1.schema.json +155 -0
  179. package/schemas/decision/DecisionRoutingPolicy.v1.schema.json +132 -0
  180. package/schemas/decision/DecisionRoutingShadowReport.v1.schema.json +170 -0
  181. package/schemas/decision/DecisionRoutingTask.v1.schema.json +49 -0
  182. package/schemas/decision/DecisionRuleset.schema.json +8 -2
  183. package/schemas/decision/DecisionRuleset.v1alpha2.schema.json +8 -2
  184. package/schemas/decision/DecisionSensitivityPlan.v1.schema.json +191 -0
  185. package/schemas/decision/DecisionSensitivityReport.v1.schema.json +163 -0
  186. package/schemas/decision/HeldoutApproval.v1.schema.json +312 -0
  187. package/schemas/decision/HeldoutAttempt.v1.schema.json +211 -0
  188. package/schemas/decision/HeldoutBaseline.v1.schema.json +90 -0
  189. package/schemas/decision/HeldoutCalibrationPhase.v1.schema.json +87 -0
  190. package/schemas/decision/HeldoutCorpus.v1.schema.json +167 -0
  191. package/schemas/decision/HeldoutEvent.v1.schema.json +41 -0
  192. package/schemas/decision/HeldoutFrozen.v1.schema.json +142 -0
  193. package/schemas/decision/HeldoutPreregistration.v1.schema.json +222 -0
  194. package/schemas/decision/HeldoutSpendEvent.v1.schema.json +122 -0
  195. package/schemas/decision/HeldoutSpendHead.v1.schema.json +25 -0
  196. package/schemas/decision/HeldoutSpendHead.v2.schema.json +46 -0
  197. package/schemas/decision/HeldoutSummary.v1.schema.json +101 -0
  198. package/schemas/decision/OpaDecisionLogExport.v1.schema.json +65 -0
  199. package/schemas/decision/PreprocessedEvidence.v1.schema.json +306 -0
  200. package/schemas/decision/RulesetResult.v1alpha2.schema.json +175 -0
  201. package/schemas/decision/SdlcEvidenceScreening.v1.schema.json +499 -0
  202. package/schemas/decision/SdlcScreeningPreregistration.v1.schema.json +132 -0
  203. package/schemas/decision/SdlcScreeningPreregistration.v2.schema.json +138 -0
  204. package/schemas/decision/SdlcScreeningRelease.v1.schema.json +654 -0
  205. package/schemas/decision/SdlcScreeningRelease.v2.schema.json +654 -0
  206. package/tools/agents/deploy-agents.mjs +1 -1
  207. package/tools/agents/providers/base.mjs +26 -7
  208. package/tools/agents/providers/factory.mjs +10 -2
  209. package/tools/agents/providers/muse-hooks.mjs +1 -29
  210. package/tools/agents/providers/muse.mjs +6 -3
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aiwg.io/schemas/decision/DecisionRoutingPolicy.v1.schema.json",
4
+ "title": "Decision Routing Policy",
5
+ "description": "D28 default-off/shadow policy for capability-constrained route selection. It cannot grant permissions.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schemaVersion", "id", "version", "mode", "policyVersion", "candidates", "defaultRouteId", "deterministicFallbackRouteId", "utility", "ceilings", "jevEvidence"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "decision-routing-policy/v1" },
11
+ "id": { "$ref": "#/$defs/name" },
12
+ "version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
13
+ "mode": { "enum": ["disabled", "shadow"], "description": "No mode executes a Jev-selected route; shadow executes only the deterministic route." },
14
+ "policyVersion": { "$ref": "#/$defs/name" },
15
+ "candidates": { "type": "array", "minItems": 1, "maxItems": 16, "items": { "$ref": "#/$defs/candidate" } },
16
+ "defaultRouteId": { "type": ["string", "null"], "minLength": 1 },
17
+ "deterministicFallbackRouteId": { "type": ["string", "null"], "minLength": 1 },
18
+ "utility": {
19
+ "type": "object",
20
+ "additionalProperties": false,
21
+ "required": ["taskFit", "complexityFit", "ambiguityPenalty", "latencyPenalty", "costPenalty", "healthPenalty"],
22
+ "properties": {
23
+ "taskFit": { "$ref": "#/$defs/nonnegativeNumber" },
24
+ "complexityFit": { "$ref": "#/$defs/nonnegativeNumber" },
25
+ "ambiguityPenalty": { "$ref": "#/$defs/nonnegativeNumber" },
26
+ "latencyPenalty": { "$ref": "#/$defs/nonnegativeNumber" },
27
+ "costPenalty": { "$ref": "#/$defs/nonnegativeNumber" },
28
+ "healthPenalty": { "$ref": "#/$defs/nonnegativeNumber" }
29
+ }
30
+ },
31
+ "ceilings": {
32
+ "type": "object",
33
+ "additionalProperties": false,
34
+ "required": ["maxAttempts", "maxFallbacks", "maxCostMicros", "deadlineMs", "retryDelayMs", "unknownCost"],
35
+ "properties": {
36
+ "maxAttempts": { "type": "integer", "minimum": 1, "maximum": 32 },
37
+ "maxFallbacks": { "type": "integer", "minimum": 0, "maximum": 15 },
38
+ "maxCostMicros": { "type": "integer", "minimum": 0 },
39
+ "deadlineMs": { "type": "integer", "minimum": 1 },
40
+ "retryDelayMs": { "type": "integer", "minimum": 1, "maximum": 30000 },
41
+ "unknownCost": { "const": "reject" }
42
+ }
43
+ },
44
+ "jevEvidence": {
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "required": ["enabled", "calibrationRequired", "compatibleProfiles", "uncertaintyThresholdBps"],
48
+ "properties": {
49
+ "enabled": { "type": "boolean" },
50
+ "calibrationRequired": { "const": true },
51
+ "compatibleProfiles": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
52
+ "uncertaintyThresholdBps": { "$ref": "#/$defs/bps" }
53
+ }
54
+ }
55
+ },
56
+ "$defs": {
57
+ "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$" },
58
+ "digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
59
+ "bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
60
+ "nonnegativeNumber": { "type": "number", "minimum": 0 },
61
+ "pin": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": ["id", "version", "digest"],
65
+ "properties": {
66
+ "id": { "$ref": "#/$defs/name" },
67
+ "version": { "type": "string", "minLength": 1 },
68
+ "digest": { "$ref": "#/$defs/digest" }
69
+ }
70
+ },
71
+ "candidate": {
72
+ "type": "object",
73
+ "additionalProperties": false,
74
+ "required": ["id", "binding", "model", "subagent", "capabilities", "permissions", "policy", "operations"],
75
+ "properties": {
76
+ "id": { "$ref": "#/$defs/name" },
77
+ "binding": { "$ref": "#/$defs/pin" },
78
+ "subagent": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/pin" }] },
79
+ "model": {
80
+ "type": "object",
81
+ "additionalProperties": false,
82
+ "required": ["provider", "backend", "requested", "pinnedVersion"],
83
+ "properties": {
84
+ "provider": { "$ref": "#/$defs/name" },
85
+ "backend": { "$ref": "#/$defs/name" },
86
+ "requested": { "$ref": "#/$defs/name" },
87
+ "pinnedVersion": { "$ref": "#/$defs/name" }
88
+ }
89
+ },
90
+ "capabilities": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
91
+ "permissions": {
92
+ "type": "object",
93
+ "additionalProperties": false,
94
+ "required": ["tools", "network", "filesystem", "secrets", "actions"],
95
+ "properties": {
96
+ "tools": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
97
+ "network": { "type": "boolean" },
98
+ "filesystem": { "enum": ["none", "read", "write"] },
99
+ "secrets": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
100
+ "actions": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } }
101
+ }
102
+ },
103
+ "policy": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": ["privacy", "authorizationScopes", "regions", "contextBytes", "allowlisted", "executable"],
107
+ "properties": {
108
+ "privacy": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
109
+ "authorizationScopes": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
110
+ "regions": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
111
+ "contextBytes": { "type": "integer", "minimum": 0 },
112
+ "allowlisted": { "type": "boolean" },
113
+ "executable": { "type": "boolean" }
114
+ }
115
+ },
116
+ "operations": {
117
+ "type": "object",
118
+ "additionalProperties": false,
119
+ "required": ["health", "latencyMsP95", "priceCatalogVersion", "costMicrosPerAttempt", "maxAttempts", "deadlineMs"],
120
+ "properties": {
121
+ "health": { "enum": ["healthy", "degraded", "rate-limited", "outage", "circuit-open"] },
122
+ "latencyMsP95": { "type": "integer", "minimum": 0 },
123
+ "priceCatalogVersion": { "$ref": "#/$defs/name" },
124
+ "costMicrosPerAttempt": { "type": ["integer", "null"], "minimum": 0 },
125
+ "maxAttempts": { "type": "integer", "minimum": 1 },
126
+ "deadlineMs": { "type": "integer", "minimum": 1 }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
@@ -0,0 +1,170 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aiwg.io/schemas/decision/DecisionRoutingShadowReport.v1.schema.json",
4
+ "title": "Decision Routing Shadow Report",
5
+ "description": "D28 paired held-out comparison of fixed, heuristic and Jev-assisted routing. It carries its observations so any verifier can rebuild it against a separately trusted preregistration digest.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schemaVersion", "id", "preregistration", "holdoutAccessedAt", "evaluatedAt", "observations", "arms", "comparisons", "integrity", "integrityFindings", "decision", "reasons", "digest"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "decision-routing-shadow-report/v1" },
11
+ "id": { "$ref": "#/$defs/name" },
12
+ "preregistration": { "$ref": "#/$defs/preregistration" },
13
+ "holdoutAccessedAt": { "type": ["string", "null"], "format": "date-time" },
14
+ "evaluatedAt": { "type": "string", "format": "date-time" },
15
+ "observations": { "type": "array", "maxItems": 300000, "items": { "$ref": "#/$defs/observation" } },
16
+ "arms": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "$ref": "#/$defs/arm" } },
17
+ "comparisons": {
18
+ "type": "object", "additionalProperties": false,
19
+ "required": ["baselineArm", "candidateArm", "pairedN", "quality", "economics", "latencyP95IncreaseMs", "providerCallsPerTask", "budgetCompliant"],
20
+ "properties": {
21
+ "baselineArm": { "enum": ["fixed", "heuristic"] },
22
+ "candidateArm": { "const": "jev-assisted" },
23
+ "pairedN": { "type": "integer", "minimum": 0 },
24
+ "quality": {
25
+ "type": "object", "additionalProperties": false, "required": ["marginBps", "interval", "decision"],
26
+ "properties": {
27
+ "marginBps": { "type": "integer", "minimum": -10000, "maximum": 0 },
28
+ "interval": {
29
+ "anyOf": [{ "type": "null" }, {
30
+ "type": "object", "additionalProperties": false, "required": ["lowerBps", "upperBps", "estimateBps", "n", "method"],
31
+ "properties": {
32
+ "lowerBps": { "type": "integer", "minimum": -10000, "maximum": 10000 },
33
+ "upperBps": { "type": "integer", "minimum": -10000, "maximum": 10000 },
34
+ "estimateBps": { "type": "integer", "minimum": -10000, "maximum": 10000 },
35
+ "n": { "type": "integer", "minimum": 1 },
36
+ "method": { "enum": ["newcombe-hybrid-score", "tango-score"] }
37
+ }
38
+ }]
39
+ },
40
+ "decision": { "enum": ["non-inferior", "not-non-inferior", "insufficient"] }
41
+ }
42
+ },
43
+ "economics": {
44
+ "type": "object", "additionalProperties": false, "required": ["baselineRiskAdjustedMicros", "candidateRiskAdjustedMicros", "netSavingsMicros"],
45
+ "properties": {
46
+ "baselineRiskAdjustedMicros": { "type": "integer", "minimum": 0 },
47
+ "candidateRiskAdjustedMicros": { "type": "integer", "minimum": 0 },
48
+ "netSavingsMicros": { "type": "integer" }
49
+ }
50
+ },
51
+ "latencyP95IncreaseMs": { "type": "integer" },
52
+ "providerCallsPerTask": { "type": "number", "minimum": 0 },
53
+ "budgetCompliant": { "type": "boolean" }
54
+ }
55
+ },
56
+ "integrity": { "type": "object", "additionalProperties": true },
57
+ "integrityFindings": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
58
+ "decision": { "enum": ["PROMOTE", "HOLD", "ROLLBACK"] },
59
+ "reasons": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
60
+ "digest": { "$ref": "#/$defs/digest" }
61
+ },
62
+ "$defs": {
63
+ "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$" },
64
+ "digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
65
+ "count": { "type": "integer", "minimum": 0 },
66
+ "rate": { "type": "number", "minimum": 0, "maximum": 1 },
67
+ "pin": {
68
+ "type": "object", "additionalProperties": false, "required": ["id", "version", "digest"],
69
+ "properties": { "id": { "$ref": "#/$defs/name" }, "version": { "type": "string", "minLength": 1 }, "digest": { "$ref": "#/$defs/digest" } }
70
+ },
71
+ "thresholds": {
72
+ "type": "object", "additionalProperties": false,
73
+ "required": ["minimumOverallN", "minimumSliceN", "ciMethod", "ciLevelBps", "qualityNonInferiorityMarginBps", "maxFailureRate", "maxReworkRate", "maxFallbackRate", "maxHumanOverrideRate", "maxLatencyP95IncreaseMs", "maxProviderCallsPerTask", "failurePenaltyMicros", "humanOverridePenaltyMicros", "budgetComplianceRequired", "positiveNetEconomicsRequired"],
74
+ "properties": {
75
+ "minimumOverallN": { "type": "integer", "minimum": 30 },
76
+ "minimumSliceN": { "type": "integer", "minimum": 10 },
77
+ "ciMethod": { "enum": ["newcombe-10", "tango"] },
78
+ "ciLevelBps": { "type": "integer", "minimum": 5001, "maximum": 9998 },
79
+ "qualityNonInferiorityMarginBps": { "type": "integer", "minimum": 0, "maximum": 10000 },
80
+ "maxFailureRate": { "$ref": "#/$defs/rate" },
81
+ "maxReworkRate": { "$ref": "#/$defs/rate" },
82
+ "maxFallbackRate": { "$ref": "#/$defs/rate" },
83
+ "maxHumanOverrideRate": { "$ref": "#/$defs/rate" },
84
+ "maxLatencyP95IncreaseMs": { "type": "integer", "minimum": 0 },
85
+ "maxProviderCallsPerTask": { "type": "number", "minimum": 0 },
86
+ "failurePenaltyMicros": { "$ref": "#/$defs/count" },
87
+ "humanOverridePenaltyMicros": { "$ref": "#/$defs/count" },
88
+ "budgetComplianceRequired": { "type": "boolean" },
89
+ "positiveNetEconomicsRequired": { "type": "boolean" }
90
+ }
91
+ },
92
+ "preregistration": {
93
+ "type": "object", "additionalProperties": false,
94
+ "required": ["schemaVersion", "policy", "baselineArm", "registeredAt", "tasks", "thresholds", "digest"],
95
+ "properties": {
96
+ "schemaVersion": { "const": "decision-routing-preregistration/v1" },
97
+ "policy": { "$ref": "#/$defs/pin" },
98
+ "baselineArm": { "enum": ["fixed", "heuristic"] },
99
+ "registeredAt": { "type": "string", "format": "date-time" },
100
+ "tasks": {
101
+ "type": "array", "minItems": 30, "maxItems": 100000,
102
+ "items": {
103
+ "type": "object", "additionalProperties": false, "required": ["id", "slice"],
104
+ "properties": { "id": { "$ref": "#/$defs/name" }, "slice": { "$ref": "#/$defs/name" } }
105
+ }
106
+ },
107
+ "thresholds": { "$ref": "#/$defs/thresholds" },
108
+ "digest": { "$ref": "#/$defs/digest" }
109
+ }
110
+ },
111
+ "observation": {
112
+ "type": "object", "additionalProperties": false,
113
+ "required": ["arm", "taskId", "slice", "success", "rework", "fallback", "humanOverride", "providerCalls", "inputTokens", "outputTokens", "attemptCostMicros", "reworkCostMicros", "budgetMicros", "latencyMs", "accepted", "policyViolation"],
114
+ "properties": {
115
+ "arm": { "enum": ["fixed", "heuristic", "jev-assisted"] },
116
+ "taskId": { "$ref": "#/$defs/name" },
117
+ "slice": { "$ref": "#/$defs/name" },
118
+ "success": { "type": "boolean" },
119
+ "rework": { "type": "boolean" },
120
+ "fallback": { "type": "boolean" },
121
+ "humanOverride": { "type": "boolean" },
122
+ "providerCalls": { "$ref": "#/$defs/count" },
123
+ "inputTokens": { "$ref": "#/$defs/count" },
124
+ "outputTokens": { "$ref": "#/$defs/count" },
125
+ "attemptCostMicros": { "$ref": "#/$defs/count" },
126
+ "reworkCostMicros": { "$ref": "#/$defs/count" },
127
+ "budgetMicros": { "$ref": "#/$defs/count" },
128
+ "latencyMs": { "$ref": "#/$defs/count" },
129
+ "accepted": { "type": "boolean" },
130
+ "policyViolation": { "type": "boolean" }
131
+ }
132
+ },
133
+ "arm": {
134
+ "type": "object", "additionalProperties": false,
135
+ "required": ["arm", "sampleN", "slices", "successRate", "failureRate", "reworkRate", "fallbackRate", "selectiveCoverage", "humanOverrideRate", "providerCalls", "inputTokens", "outputTokens", "attemptCostMicros", "reworkCostMicros", "totalCostMicros", "riskAdjustedCostMicros", "overBudgetTasks", "latencyMsP95", "policyViolations"],
136
+ "properties": {
137
+ "arm": { "enum": ["fixed", "heuristic", "jev-assisted"] },
138
+ "sampleN": { "$ref": "#/$defs/count" },
139
+ "slices": { "type": "object", "additionalProperties": { "$ref": "#/$defs/slice" } },
140
+ "successRate": { "$ref": "#/$defs/rate" },
141
+ "failureRate": { "$ref": "#/$defs/rate" },
142
+ "reworkRate": { "$ref": "#/$defs/rate" },
143
+ "fallbackRate": { "$ref": "#/$defs/rate" },
144
+ "selectiveCoverage": { "$ref": "#/$defs/rate" },
145
+ "humanOverrideRate": { "$ref": "#/$defs/rate" },
146
+ "providerCalls": { "$ref": "#/$defs/count" },
147
+ "inputTokens": { "$ref": "#/$defs/count" },
148
+ "outputTokens": { "$ref": "#/$defs/count" },
149
+ "attemptCostMicros": { "$ref": "#/$defs/count" },
150
+ "reworkCostMicros": { "$ref": "#/$defs/count" },
151
+ "totalCostMicros": { "$ref": "#/$defs/count" },
152
+ "riskAdjustedCostMicros": { "$ref": "#/$defs/count" },
153
+ "overBudgetTasks": { "$ref": "#/$defs/count" },
154
+ "latencyMsP95": { "$ref": "#/$defs/count" },
155
+ "policyViolations": { "$ref": "#/$defs/count" }
156
+ }
157
+ },
158
+ "slice": {
159
+ "type": "object", "additionalProperties": false,
160
+ "required": ["sampleN", "successRate", "failureRate", "reworkRate", "fallbackRate"],
161
+ "properties": {
162
+ "sampleN": { "$ref": "#/$defs/count" },
163
+ "successRate": { "$ref": "#/$defs/rate" },
164
+ "failureRate": { "$ref": "#/$defs/rate" },
165
+ "reworkRate": { "$ref": "#/$defs/rate" },
166
+ "fallbackRate": { "$ref": "#/$defs/rate" }
167
+ }
168
+ }
169
+ }
170
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aiwg.io/schemas/decision/DecisionRoutingTask.v1.schema.json",
4
+ "title": "Decision Routing Task",
5
+ "description": "D28 closed task envelope. Every hard requirement is mandatory; unknown requirements fail closed. Only projected state is model-visible.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["id", "description", "requirements", "state", "projection"],
9
+ "properties": {
10
+ "id": { "$ref": "#/$defs/name" },
11
+ "description": { "type": "string", "maxLength": 4096, "description": "Operator-facing only; never sent to Jev." },
12
+ "requirements": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": ["capabilities", "privacy", "authorizationScopes", "region", "tools", "contextBytes", "allowlist", "maxCostMicros", "deadlineMs", "providers", "authorized"],
16
+ "properties": {
17
+ "capabilities": { "$ref": "#/$defs/names" },
18
+ "privacy": { "$ref": "#/$defs/name" },
19
+ "authorizationScopes": { "$ref": "#/$defs/names" },
20
+ "region": { "$ref": "#/$defs/name" },
21
+ "tools": { "$ref": "#/$defs/names" },
22
+ "contextBytes": { "type": "integer", "minimum": 0 },
23
+ "allowlist": { "$ref": "#/$defs/names" },
24
+ "maxCostMicros": { "type": "integer", "minimum": 0 },
25
+ "deadlineMs": { "type": "integer", "minimum": 1 },
26
+ "providers": { "$ref": "#/$defs/names" },
27
+ "authorized": {
28
+ "type": "object",
29
+ "additionalProperties": false,
30
+ "required": ["tools", "network", "filesystem", "secrets", "actions"],
31
+ "description": "Ordinary authorization ceiling. A route binding holding more than this is excluded.",
32
+ "properties": {
33
+ "tools": { "$ref": "#/$defs/names" },
34
+ "network": { "type": "boolean" },
35
+ "filesystem": { "enum": ["none", "read", "write"] },
36
+ "secrets": { "$ref": "#/$defs/names" },
37
+ "actions": { "$ref": "#/$defs/names" }
38
+ }
39
+ }
40
+ }
41
+ },
42
+ "state": { "description": "Ambient task state. Only fields declared by the projection reach Jev." },
43
+ "projection": { "type": "object", "description": "D10 DecisionProjectionPolicy, validated by validateProjectionPolicy." }
44
+ },
45
+ "$defs": {
46
+ "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$" },
47
+ "names": { "type": "array", "uniqueItems": true, "maxItems": 64, "items": { "$ref": "#/$defs/name" } }
48
+ }
49
+ }
@@ -86,7 +86,7 @@
86
86
  ],
87
87
  "additionalProperties": false
88
88
  },
89
- "minItems": 1
89
+ "minItems": 0
90
90
  },
91
91
  "rules": {
92
92
  "type": "array",
@@ -120,7 +120,13 @@
120
120
  "composition": {
121
121
  "enum": [
122
122
  "first-match",
123
- "collect"
123
+ "unique",
124
+ "any",
125
+ "collect",
126
+ "collect-sum",
127
+ "collect-min",
128
+ "collect-max",
129
+ "collect-count"
124
130
  ]
125
131
  },
126
132
  "conflict": {
@@ -86,7 +86,7 @@
86
86
  ],
87
87
  "additionalProperties": false
88
88
  },
89
- "minItems": 1
89
+ "minItems": 0
90
90
  },
91
91
  "rules": {
92
92
  "type": "array",
@@ -120,7 +120,13 @@
120
120
  "composition": {
121
121
  "enum": [
122
122
  "first-match",
123
- "collect"
123
+ "unique",
124
+ "any",
125
+ "collect",
126
+ "collect-sum",
127
+ "collect-min",
128
+ "collect-max",
129
+ "collect-count"
124
130
  ]
125
131
  },
126
132
  "conflict": {
@@ -0,0 +1,191 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aiwg.io/schemas/decision/DecisionSensitivityPlan.v1.schema.json",
4
+ "title": "Decision Sensitivity Plan",
5
+ "description": "D23 bounded counterfactual sensitivity plan. Default-off reviewer analysis only; it cannot authorize actions.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion", "id", "version", "mode", "tenantId", "workspaceId", "projectId", "actor", "purpose",
10
+ "sourceSubject", "source", "analysisKind", "allowedPaths", "pathDomains", "variants", "budgets",
11
+ "privacy", "retention", "baselineStability", "unchangedVariant", "authorization", "probeControl",
12
+ "requestedMetrics", "comparisonBaseline"
13
+ ],
14
+ "properties": {
15
+ "schemaVersion": { "const": "decision-sensitivity-plan/v1" },
16
+ "id": { "$ref": "#/$defs/name" },
17
+ "version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
18
+ "mode": { "enum": ["disabled", "shadow"] },
19
+ "tenantId": { "$ref": "#/$defs/name" },
20
+ "workspaceId": { "$ref": "#/$defs/name" },
21
+ "projectId": { "$ref": "#/$defs/name" },
22
+ "actor": {
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": ["principalId", "authenticatedAt"],
26
+ "properties": {
27
+ "principalId": { "$ref": "#/$defs/name" },
28
+ "authenticatedAt": { "$ref": "#/$defs/dateTime" }
29
+ }
30
+ },
31
+ "purpose": { "type": "string", "minLength": 1, "maxLength": 256 },
32
+ "sourceSubject": {
33
+ "type": "object",
34
+ "additionalProperties": false,
35
+ "required": ["tenantId", "workspaceId", "projectId", "subjectRef"],
36
+ "properties": {
37
+ "tenantId": { "$ref": "#/$defs/name" },
38
+ "workspaceId": { "$ref": "#/$defs/name" },
39
+ "projectId": { "$ref": "#/$defs/name" },
40
+ "subjectRef": { "$ref": "#/$defs/name" }
41
+ }
42
+ },
43
+ "source": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": ["ruleset", "binding", "result", "evidencePins", "policyPins"],
47
+ "properties": {
48
+ "ruleset": { "$ref": "#/$defs/pin" },
49
+ "binding": { "$ref": "#/$defs/pin" },
50
+ "result": { "$ref": "#/$defs/pin" },
51
+ "evidencePins": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/pin" } },
52
+ "policyPins": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/pin" } }
53
+ }
54
+ },
55
+ "analysisKind": { "enum": ["policy-replay", "input-reevaluation"] },
56
+ "allowedPaths": { "type": "array", "minItems": 1, "maxItems": 64, "uniqueItems": true, "items": { "$ref": "#/$defs/pointer" } },
57
+ "pathDomains": {
58
+ "type": "array",
59
+ "minItems": 1,
60
+ "maxItems": 64,
61
+ "items": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": ["path", "values", "sensitivity"],
65
+ "properties": {
66
+ "path": { "$ref": "#/$defs/pointer" },
67
+ "values": { "type": "array", "minItems": 1, "maxItems": 32, "items": { "$ref": "#/$defs/json" } },
68
+ "sensitivity": { "enum": ["public", "internal", "confidential", "restricted"] }
69
+ }
70
+ }
71
+ },
72
+ "variants": { "type": "array", "minItems": 1, "maxItems": 128, "items": { "$ref": "#/$defs/variant" } },
73
+ "budgets": {
74
+ "type": "object",
75
+ "additionalProperties": false,
76
+ "required": ["maxVariants", "maxBackendCalls", "maxTokens", "maxCostMicros", "concurrency", "deadlineMs"],
77
+ "properties": {
78
+ "maxVariants": { "type": "integer", "minimum": 1, "maximum": 128 },
79
+ "maxBackendCalls": { "type": "integer", "minimum": 0, "maximum": 512 },
80
+ "maxTokens": { "type": "integer", "minimum": 0 },
81
+ "maxCostMicros": { "type": "integer", "minimum": 0 },
82
+ "concurrency": { "type": "integer", "minimum": 1, "maximum": 16 },
83
+ "deadlineMs": { "type": "integer", "minimum": 1, "maximum": 3600000 }
84
+ }
85
+ },
86
+ "privacy": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["egress", "redaction", "summaryPrecisionBps", "differencing"],
90
+ "properties": {
91
+ "egress": { "enum": ["metadata-only", "no-external-egress"] },
92
+ "redaction": { "enum": ["hash-values", "opaque-ids"] },
93
+ "summaryPrecisionBps": { "type": "integer", "minimum": 1, "maximum": 10000 },
94
+ "differencing": { "enum": ["deny", "coarsen"] }
95
+ }
96
+ },
97
+ "retention": {
98
+ "type": "object",
99
+ "additionalProperties": false,
100
+ "required": ["class", "deleteAfterEpochMs", "legalHold"],
101
+ "properties": {
102
+ "class": { "enum": ["ephemeral", "review-evidence"] },
103
+ "deleteAfterEpochMs": { "type": "integer", "minimum": 0 },
104
+ "legalHold": { "type": "boolean" }
105
+ }
106
+ },
107
+ "baselineStability": {
108
+ "type": "object",
109
+ "additionalProperties": false,
110
+ "required": ["enabled", "repeats"],
111
+ "properties": {
112
+ "enabled": { "type": "boolean" },
113
+ "repeats": { "type": "integer", "minimum": 0, "maximum": 32 }
114
+ }
115
+ },
116
+ "unchangedVariant": { "enum": ["deduplicate", "retain-control"] },
117
+ "authorization": {
118
+ "type": "object",
119
+ "additionalProperties": false,
120
+ "required": ["authorizedLabels", "authorizedActions", "approvedAt", "expiresAt"],
121
+ "properties": {
122
+ "authorizedLabels": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
123
+ "authorizedActions": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/name" } },
124
+ "approvedAt": { "$ref": "#/$defs/dateTime" },
125
+ "expiresAt": { "$ref": "#/$defs/dateTime" }
126
+ }
127
+ },
128
+ "probeControl": {
129
+ "type": "object",
130
+ "additionalProperties": false,
131
+ "required": ["windowId", "maxPerPrincipalSubjectPath", "maxReportsPerWindow", "prohibitMembershipQueries"],
132
+ "properties": {
133
+ "windowId": { "$ref": "#/$defs/name" },
134
+ "maxPerPrincipalSubjectPath": { "type": "integer", "minimum": 1, "maximum": 128 },
135
+ "maxReportsPerWindow": { "type": "integer", "minimum": 1, "maximum": 128 },
136
+ "prohibitMembershipQueries": { "type": "boolean" }
137
+ }
138
+ },
139
+ "requestedMetrics": {
140
+ "type": "array",
141
+ "minItems": 1,
142
+ "uniqueItems": true,
143
+ "items": { "enum": ["outcome-change", "acceptance-change", "rule-change", "distribution-distance", "minimum-threshold-change", "stability-repeat"] }
144
+ },
145
+ "comparisonBaseline": { "enum": ["source-result", "stability-control"] }
146
+ },
147
+ "$defs": {
148
+ "name": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$" },
149
+ "digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
150
+ "dateTime": { "type": "string", "format": "date-time" },
151
+ "pointer": { "type": "string", "pattern": "^(|/(?:[^/~]|~0|~1)*)+$" },
152
+ "pin": {
153
+ "type": "object",
154
+ "additionalProperties": false,
155
+ "required": ["id", "version", "digest"],
156
+ "properties": {
157
+ "id": { "$ref": "#/$defs/name" },
158
+ "version": { "type": "string", "minLength": 1, "maxLength": 80 },
159
+ "digest": { "$ref": "#/$defs/digest" }
160
+ }
161
+ },
162
+ "json": {
163
+ "anyOf": [
164
+ { "type": "null" },
165
+ { "type": "boolean" },
166
+ { "type": "number" },
167
+ { "type": "string", "maxLength": 2048 },
168
+ { "type": "array", "maxItems": 64, "items": { "$ref": "#/$defs/json" } },
169
+ { "type": "object", "maxProperties": 64, "additionalProperties": { "$ref": "#/$defs/json" } }
170
+ ]
171
+ },
172
+ "change": {
173
+ "type": "object",
174
+ "additionalProperties": false,
175
+ "required": ["path", "value"],
176
+ "properties": {
177
+ "path": { "$ref": "#/$defs/pointer" },
178
+ "value": { "$ref": "#/$defs/json" }
179
+ }
180
+ },
181
+ "variant": {
182
+ "type": "object",
183
+ "additionalProperties": false,
184
+ "required": ["id", "changes"],
185
+ "properties": {
186
+ "id": { "$ref": "#/$defs/name" },
187
+ "changes": { "type": "array", "minItems": 1, "maxItems": 16, "items": { "$ref": "#/$defs/change" } }
188
+ }
189
+ }
190
+ }
191
+ }