project-tiny-context-harness 0.8.10 → 0.8.12

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 (279) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +490 -472
  3. package/assets/README.md +762 -749
  4. package/assets/README.zh-CN.md +446 -431
  5. package/assets/agents/.gitkeep +1 -1
  6. package/assets/agents/AGENTS_CORE.md +17 -23
  7. package/assets/agents/long-task-implementation.toml +15 -0
  8. package/assets/context_templates/architecture.md +18 -18
  9. package/assets/context_templates/area.md +30 -30
  10. package/assets/context_templates/context.toml +24 -24
  11. package/assets/context_templates/deployment.md +35 -35
  12. package/assets/context_templates/global.md +56 -56
  13. package/assets/context_templates/product-surface-contract.md +70 -70
  14. package/assets/context_templates/screen-contract.md +189 -189
  15. package/assets/context_templates/verification.md +25 -25
  16. package/assets/github/.gitkeep +1 -1
  17. package/assets/github/harness.yml +39 -39
  18. package/assets/make/.gitkeep +1 -1
  19. package/assets/make/ty-context.mk +48 -48
  20. package/assets/skills/context_development_engineer/SKILL.md +64 -185
  21. package/assets/skills/context_full_project_export/SKILL.md +28 -28
  22. package/assets/skills/context_harness_upgrade/SKILL.md +60 -60
  23. package/assets/skills/context_product_plan/SKILL.md +35 -101
  24. package/assets/skills/context_surface_contract/SKILL.md +194 -191
  25. package/assets/skills/context_uiux_design/SKILL.md +49 -172
  26. package/assets/skills/design-resource-authoring/SKILL.md +52 -88
  27. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +51 -163
  28. package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +96 -0
  29. package/assets/skills/design-resource-authoring/references/open-design-provider.md +119 -119
  30. package/assets/skills/design-resource-authoring/references/resource-selection.md +158 -181
  31. package/assets/skills/design-system-authoring/SKILL.md +57 -57
  32. package/assets/skills/design-system-authoring/agents/openai.yaml +6 -6
  33. package/assets/skills/design-system-authoring/references/authority-adoption.md +48 -48
  34. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +110 -110
  35. package/assets/skills/long-task-workflow/SKILL.md +71 -106
  36. package/assets/skills/long-task-workflow/agents/openai.yaml +1 -1
  37. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +71 -69
  38. package/assets/skills/long-task-workflow/references/contract-authoring.md +98 -94
  39. package/assets/skills/long-task-workflow/references/evidence-design.md +67 -63
  40. package/assets/skills/long-task-workflow/references/source-authoring.md +90 -90
  41. package/assets/tools/validate_context.py +442 -442
  42. package/dist/commands/design-resource.js +9 -2
  43. package/dist/commands/enable.js +2 -0
  44. package/dist/commands/index.js +1 -1
  45. package/dist/commands/long-task-revision.js +8 -7
  46. package/dist/commands/sync.js +2 -0
  47. package/dist/index.d.ts +3 -4
  48. package/dist/index.js +2 -1
  49. package/dist/lib/compact-authoring-support.d.ts +22 -0
  50. package/dist/lib/compact-authoring-support.js +143 -0
  51. package/dist/lib/compact-shared-structure-authoring.d.ts +5 -0
  52. package/dist/lib/compact-shared-structure-authoring.js +9 -0
  53. package/dist/lib/compact-shared-structure-types.d.ts +61 -0
  54. package/dist/lib/compact-shared-structure-types.js +1 -0
  55. package/dist/lib/compact-shared-structure-validation.d.ts +2 -0
  56. package/dist/lib/compact-shared-structure-validation.js +159 -0
  57. package/dist/lib/compact-shared-structures.d.ts +3 -0
  58. package/dist/lib/compact-shared-structures.js +204 -0
  59. package/dist/lib/design-resource-fact-enums.d.ts +4 -0
  60. package/dist/lib/design-resource-fact-enums.js +12 -0
  61. package/dist/lib/design-resource-fact-manifest-shape-evidence.js +2 -2
  62. package/dist/lib/design-resource-fact-manifest-validation.d.ts +2 -1
  63. package/dist/lib/design-resource-fact-policy.d.ts +2 -2
  64. package/dist/lib/design-resource-fact-types.d.ts +2 -2
  65. package/dist/lib/design-resource-handoff-bundle-draft.d.ts +11 -0
  66. package/dist/lib/design-resource-handoff-bundle-draft.js +40 -0
  67. package/dist/lib/design-resource-handoff-bundle.js +4 -28
  68. package/dist/lib/design-resource-handoff-input-types.d.ts +14 -0
  69. package/dist/lib/design-resource-handoff-input-types.js +1 -0
  70. package/dist/lib/design-resource-handoff-manifest-projection.d.ts +2 -1
  71. package/dist/lib/design-resource-handoff-parser.d.ts +2 -2
  72. package/dist/lib/design-resource-handoff-parser.js +2 -2
  73. package/dist/lib/design-resource-handoff-shape.d.ts +4 -1
  74. package/dist/lib/design-resource-handoff-shape.js +10 -0
  75. package/dist/lib/design-resource-handoff-snapshot.d.ts +1 -1
  76. package/dist/lib/design-resource-handoff-snapshot.js +4 -0
  77. package/dist/lib/design-resource-handoff-types.d.ts +0 -10
  78. package/dist/lib/design-resource-handoff-validation.d.ts +6 -2
  79. package/dist/lib/design-resource-handoff-validation.js +11 -0
  80. package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +4 -2
  81. package/dist/lib/design-resource-symbolic-applicability-authority.d.ts +7 -0
  82. package/dist/lib/design-resource-symbolic-applicability-authority.js +19 -0
  83. package/dist/lib/design-resource-symbolic-applicability-policy.d.ts +12 -0
  84. package/dist/lib/design-resource-symbolic-applicability-policy.js +79 -0
  85. package/dist/lib/design-resource-symbolic-applicability-profiles.d.ts +8 -0
  86. package/dist/lib/design-resource-symbolic-applicability-profiles.js +55 -0
  87. package/dist/lib/design-resource-symbolic-applicability-shape.d.ts +2 -0
  88. package/dist/lib/design-resource-symbolic-applicability-shape.js +76 -0
  89. package/dist/lib/design-resource-symbolic-applicability-validation.d.ts +7 -0
  90. package/dist/lib/design-resource-symbolic-applicability-validation.js +128 -0
  91. package/dist/lib/design-resource-symbolic-compilation.d.ts +3 -0
  92. package/dist/lib/design-resource-symbolic-compilation.js +13 -0
  93. package/dist/lib/design-resource-symbolic-denotation.d.ts +3 -0
  94. package/dist/lib/design-resource-symbolic-denotation.js +167 -0
  95. package/dist/lib/design-resource-symbolic-disposition-validation.d.ts +4 -0
  96. package/dist/lib/design-resource-symbolic-disposition-validation.js +28 -0
  97. package/dist/lib/design-resource-symbolic-fact-policy.d.ts +12 -0
  98. package/dist/lib/design-resource-symbolic-fact-policy.js +12 -0
  99. package/dist/lib/design-resource-symbolic-fact-shape.d.ts +3 -0
  100. package/dist/lib/design-resource-symbolic-fact-shape.js +138 -0
  101. package/dist/lib/design-resource-symbolic-fact-types.d.ts +213 -0
  102. package/dist/lib/design-resource-symbolic-fact-types.js +1 -0
  103. package/dist/lib/design-resource-symbolic-fact-validation.d.ts +3 -0
  104. package/dist/lib/design-resource-symbolic-fact-validation.js +86 -0
  105. package/dist/lib/design-resource-symbolic-indexes.d.ts +23 -0
  106. package/dist/lib/design-resource-symbolic-indexes.js +54 -0
  107. package/dist/lib/design-resource-symbolic-manifest-shape.d.ts +3 -0
  108. package/dist/lib/design-resource-symbolic-manifest-shape.js +155 -0
  109. package/dist/lib/design-resource-symbolic-manifest-validation.d.ts +6 -0
  110. package/dist/lib/design-resource-symbolic-manifest-validation.js +132 -0
  111. package/dist/lib/design-resource-symbolic-noninterference-artifact.d.ts +33 -0
  112. package/dist/lib/design-resource-symbolic-noninterference-artifact.js +110 -0
  113. package/dist/lib/design-resource-symbolic-noninterference-equivalence.d.ts +3 -0
  114. package/dist/lib/design-resource-symbolic-noninterference-equivalence.js +77 -0
  115. package/dist/lib/design-resource-symbolic-noninterference-recompute.d.ts +4 -0
  116. package/dist/lib/design-resource-symbolic-noninterference-recompute.js +146 -0
  117. package/dist/lib/design-resource-symbolic-noninterference-scope.d.ts +7 -0
  118. package/dist/lib/design-resource-symbolic-noninterference-scope.js +49 -0
  119. package/dist/lib/design-resource-symbolic-noninterference-shape.d.ts +2 -0
  120. package/dist/lib/design-resource-symbolic-noninterference-shape.js +152 -0
  121. package/dist/lib/design-resource-symbolic-noninterference-types.d.ts +103 -0
  122. package/dist/lib/design-resource-symbolic-noninterference-types.js +1 -0
  123. package/dist/lib/design-resource-symbolic-noninterference-validation.d.ts +5 -0
  124. package/dist/lib/design-resource-symbolic-noninterference-validation.js +62 -0
  125. package/dist/lib/design-resource-symbolic-oracle-fingerprint.d.ts +1 -0
  126. package/dist/lib/design-resource-symbolic-oracle-fingerprint.js +47 -0
  127. package/dist/lib/design-resource-symbolic-predicate-shape.d.ts +6 -0
  128. package/dist/lib/design-resource-symbolic-predicate-shape.js +123 -0
  129. package/dist/lib/design-resource-symbolic-production-closure.d.ts +4 -0
  130. package/dist/lib/design-resource-symbolic-production-closure.js +144 -0
  131. package/dist/lib/design-resource-symbolic-proof-authority-validation.d.ts +10 -0
  132. package/dist/lib/design-resource-symbolic-proof-authority-validation.js +68 -0
  133. package/dist/lib/design-resource-symbolic-proof-validation.d.ts +10 -0
  134. package/dist/lib/design-resource-symbolic-proof-validation.js +89 -0
  135. package/dist/lib/design-resource-symbolic-region-validation.d.ts +19 -0
  136. package/dist/lib/design-resource-symbolic-region-validation.js +146 -0
  137. package/dist/lib/design-resource-symbolic-resource-validation.d.ts +5 -0
  138. package/dist/lib/design-resource-symbolic-resource-validation.js +90 -0
  139. package/dist/lib/design-resource-symbolic-rule-shape.d.ts +27 -0
  140. package/dist/lib/design-resource-symbolic-rule-shape.js +158 -0
  141. package/dist/lib/design-resource-symbolic-safety-validation.d.ts +6 -0
  142. package/dist/lib/design-resource-symbolic-safety-validation.js +29 -0
  143. package/dist/lib/design-resource-symbolic-source-ir-evaluation.d.ts +19 -0
  144. package/dist/lib/design-resource-symbolic-source-ir-evaluation.js +74 -0
  145. package/dist/lib/design-resource-symbolic-source-ir-evidence.d.ts +44 -0
  146. package/dist/lib/design-resource-symbolic-source-ir-evidence.js +88 -0
  147. package/dist/lib/design-resource-symbolic-source-ir-oracle.d.ts +13 -0
  148. package/dist/lib/design-resource-symbolic-source-ir-oracle.js +96 -0
  149. package/dist/lib/design-resource-symbolic-source-ir-proof.d.ts +14 -0
  150. package/dist/lib/design-resource-symbolic-source-ir-proof.js +98 -0
  151. package/dist/lib/design-resource-symbolic-source-ir-shape.d.ts +2 -0
  152. package/dist/lib/design-resource-symbolic-source-ir-shape.js +38 -0
  153. package/dist/lib/design-resource-symbolic-source-ir-types.d.ts +17 -0
  154. package/dist/lib/design-resource-symbolic-source-ir-types.js +2 -0
  155. package/dist/lib/design-resource-symbolic-static-dependency-validation.d.ts +2 -0
  156. package/dist/lib/design-resource-symbolic-static-dependency-validation.js +83 -0
  157. package/dist/lib/design-resource-symbolic-structural-closure-validation.d.ts +6 -0
  158. package/dist/lib/design-resource-symbolic-structural-closure-validation.js +79 -0
  159. package/dist/lib/design-resource-symbolic-validation-support.d.ts +29 -0
  160. package/dist/lib/design-resource-symbolic-validation-support.js +111 -0
  161. package/dist/lib/design-resource-v1-capacity-header.d.ts +8 -0
  162. package/dist/lib/design-resource-v1-capacity-header.js +231 -0
  163. package/dist/lib/design-resource-v1-capacity.d.ts +5 -0
  164. package/dist/lib/design-resource-v1-capacity.js +45 -0
  165. package/dist/lib/init.js +1 -0
  166. package/dist/lib/long-task-activation-validation.js +2 -2
  167. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  168. package/dist/lib/long-task-authority-policy.js +3 -0
  169. package/dist/lib/long-task-codex-agent-profile.d.ts +42 -0
  170. package/dist/lib/long-task-codex-agent-profile.js +276 -0
  171. package/dist/lib/long-task-compact-authoring-projections.d.ts +12 -0
  172. package/dist/lib/long-task-compact-authoring-projections.js +67 -0
  173. package/dist/lib/long-task-compact-authoring.d.ts +3 -0
  174. package/dist/lib/long-task-compact-authoring.js +173 -0
  175. package/dist/lib/long-task-compact-carrier.d.ts +7 -0
  176. package/dist/lib/long-task-compact-carrier.js +132 -0
  177. package/dist/lib/long-task-compact-parser.d.ts +14 -0
  178. package/dist/lib/long-task-compact-parser.js +123 -0
  179. package/dist/lib/long-task-compact-primitives.d.ts +22 -0
  180. package/dist/lib/long-task-compact-primitives.js +132 -0
  181. package/dist/lib/long-task-compact-projections.d.ts +4 -0
  182. package/dist/lib/long-task-compact-projections.js +153 -0
  183. package/dist/lib/long-task-compact-structure-targets.d.ts +2 -0
  184. package/dist/lib/long-task-compact-structure-targets.js +90 -0
  185. package/dist/lib/long-task-counterfactual-sandbox.d.ts +1 -1
  186. package/dist/lib/long-task-counterfactual-sandbox.js +7 -5
  187. package/dist/lib/long-task-delivery-parser.d.ts +1 -0
  188. package/dist/lib/long-task-delivery-parser.js +38 -6
  189. package/dist/lib/long-task-design-resource-handoff.d.ts +2 -1
  190. package/dist/lib/long-task-design-resource-handoff.js +71 -11
  191. package/dist/lib/long-task-design-resource-method-binding.d.ts +8 -1
  192. package/dist/lib/long-task-design-resource-method-binding.js +150 -0
  193. package/dist/lib/long-task-evidence-capability-codec.js +256 -34
  194. package/dist/lib/long-task-evidence-capability-policy.js +28 -0
  195. package/dist/lib/long-task-evidence-capability-runtime.js +271 -63
  196. package/dist/lib/long-task-evidence-capability-types.d.ts +70 -2
  197. package/dist/lib/long-task-evidence-v2.d.ts +1 -1
  198. package/dist/lib/long-task-evidence-v2.js +5 -5
  199. package/dist/lib/long-task-hook-install.d.ts +19 -2
  200. package/dist/lib/long-task-hook-install.js +288 -91
  201. package/dist/lib/long-task-playwright-capability-records.d.ts +2 -0
  202. package/dist/lib/long-task-playwright-capability-records.js +74 -2
  203. package/dist/lib/long-task-runner-freeze.d.ts +1 -1
  204. package/dist/lib/long-task-runner-freeze.js +4 -2
  205. package/dist/lib/long-task-semantic-contract-types.d.ts +1 -1
  206. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +8 -0
  207. package/dist/lib/long-task-semantic-fact-closure.js +4 -1
  208. package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +1 -1
  209. package/dist/lib/long-task-semantic-fact-contract-closure.js +15 -3
  210. package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +1 -1
  211. package/dist/lib/long-task-semantic-fact-contract-facts.js +4 -1
  212. package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +1 -1
  213. package/dist/lib/long-task-semantic-fact-contract-proofs.js +12 -3
  214. package/dist/lib/long-task-semantic-fact-evidence.d.ts +5 -1
  215. package/dist/lib/long-task-semantic-fact-evidence.js +47 -4
  216. package/dist/lib/long-task-semantic-fact-shape.js +17 -6
  217. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  218. package/dist/lib/long-task-shape-primitives.js +1 -0
  219. package/dist/lib/long-task-source-item-parser.d.ts +2 -2
  220. package/dist/lib/long-task-source-item-parser.js +20 -11
  221. package/dist/lib/long-task-ui-design-policy.js +64 -4
  222. package/dist/lib/long-task-ui-surface-shape.js +195 -0
  223. package/dist/lib/long-task-ui-surface-types.d.ts +53 -0
  224. package/dist/lib/long-task-verifier-v2.js +1 -1
  225. package/dist/lib/long-task-worker-selection.d.ts +2 -0
  226. package/dist/lib/long-task-worker-selection.js +7 -0
  227. package/dist/lib/long-task-workspace-scope.js +3 -1
  228. package/dist/lib/long-task-workspace.js +11 -1
  229. package/dist/lib/migrations.js +58 -0
  230. package/dist/lib/profiles.js +0 -1
  231. package/dist/lib/semantic-fact-compact-authoring.d.ts +2 -0
  232. package/dist/lib/semantic-fact-compact-authoring.js +160 -0
  233. package/dist/lib/semantic-fact-compact-capacity.d.ts +9 -0
  234. package/dist/lib/semantic-fact-compact-capacity.js +40 -0
  235. package/dist/lib/semantic-fact-compact-carrier.d.ts +16 -0
  236. package/dist/lib/semantic-fact-compact-carrier.js +146 -0
  237. package/dist/lib/semantic-fact-compact-parser.d.ts +17 -0
  238. package/dist/lib/semantic-fact-compact-parser.js +168 -0
  239. package/dist/lib/semantic-fact-compact-revision.d.ts +11 -0
  240. package/dist/lib/semantic-fact-compact-revision.js +64 -0
  241. package/dist/lib/semantic-fact-compact-support.d.ts +23 -0
  242. package/dist/lib/semantic-fact-compact-support.js +159 -0
  243. package/dist/lib/semantic-fact-policy-census.d.ts +1 -0
  244. package/dist/lib/semantic-fact-policy-census.js +43 -0
  245. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  246. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  247. package/dist/lib/semantic-fact-source-parser.d.ts +5 -0
  248. package/dist/lib/semantic-fact-source-parser.js +47 -6
  249. package/dist/lib/structural-closure-cost.d.ts +79 -0
  250. package/dist/lib/structural-closure-cost.js +91 -0
  251. package/dist/lib/symbolic-denotation-dag-builder.d.ts +25 -0
  252. package/dist/lib/symbolic-denotation-dag-builder.js +176 -0
  253. package/dist/lib/symbolic-denotation-domain-validation.d.ts +3 -0
  254. package/dist/lib/symbolic-denotation-domain-validation.js +56 -0
  255. package/dist/lib/symbolic-denotation-engine.d.ts +32 -0
  256. package/dist/lib/symbolic-denotation-engine.js +140 -0
  257. package/dist/lib/symbolic-denotation-public.d.ts +11 -0
  258. package/dist/lib/symbolic-denotation-public.js +12 -0
  259. package/dist/lib/symbolic-denotation-runtime.d.ts +20 -0
  260. package/dist/lib/symbolic-denotation-runtime.js +90 -0
  261. package/dist/lib/symbolic-denotation-support.d.ts +11 -0
  262. package/dist/lib/symbolic-denotation-support.js +49 -0
  263. package/dist/lib/symbolic-denotation-types.d.ts +133 -0
  264. package/dist/lib/symbolic-denotation-types.js +18 -0
  265. package/dist/lib/symbolic-denotation-validation.d.ts +6 -0
  266. package/dist/lib/symbolic-denotation-validation.js +126 -0
  267. package/dist/lib/sync-engine.d.ts +1 -0
  268. package/dist/lib/sync-engine.js +4 -1
  269. package/dist/lib/upgrade.js +1 -0
  270. package/dist/long-task-hook.js +40 -1
  271. package/dist/public-types.d.ts +8 -0
  272. package/dist/public-types.js +1 -0
  273. package/dist/schemas/design-resource-symbolic-noninterference-artifact-v2.schema.json +289 -0
  274. package/dist/schemas/design-resource-symbolic-source-ir-v1.schema.json +130 -0
  275. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +390 -5
  276. package/migrations/README.md +15 -15
  277. package/package.json +2 -2
  278. package/source-mappings.yaml +28 -25
  279. package/assets/skills/source-plan-authoring/SKILL.md +0 -14
@@ -0,0 +1,12 @@
1
+ import type { DeliveryContractV2 } from "./long-task-delivery-types.js";
2
+ import type { SemanticFactRevisionIdentityV1 } from "./semantic-fact-compact-carrier.js";
3
+ export declare function compactClaimProjection(outcomeRef: string, kind: "requirement" | "obligation" | "forbidden_shortcut" | "non_completing_outcome", row: {
4
+ key: string;
5
+ statement: string;
6
+ applicability_refs: string[];
7
+ required_proof_surfaces?: string[];
8
+ }, claimsByStatement: Map<string, string>): Record<string, unknown>;
9
+ export declare function compactAssertionProjection(outcomeRef: string, checkRef: string, position: number, assertion: Record<string, unknown>, claimsByStatement: Map<string, string>, facts: Map<string, string>): Record<string, unknown> | null;
10
+ export declare function compactRevisionMap(rows: SemanticFactRevisionIdentityV1[], label: string): Map<string, string>;
11
+ export declare function compactUniqueClaimStatements(claims: DeliveryContractV2["source_claims"]): Map<string, string>;
12
+ export declare function assertSameCompactKeys(left: string[], right: string[], label: string): void;
@@ -0,0 +1,67 @@
1
+ import { canonicalValueJson } from "./strict-codec.js";
2
+ import { compactWithoutFields } from "./compact-authoring-support.js";
3
+ export function compactClaimProjection(outcomeRef, kind, row, claimsByStatement) {
4
+ const claimKey = claimsByStatement.get(row.statement) ?? null;
5
+ return {
6
+ outcome_ref: outcomeRef,
7
+ projection_kind: kind,
8
+ projection_key: row.key,
9
+ claim_key: claimKey,
10
+ statement: claimKey ? null : row.statement,
11
+ required_proof_surfaces: row.required_proof_surfaces ?? null,
12
+ applicability_refs: row.applicability_refs,
13
+ };
14
+ }
15
+ export function compactAssertionProjection(outcomeRef, checkRef, position, assertion, claimsByStatement, facts) {
16
+ const criterion = String(assertion.criterion ?? "");
17
+ const claimRef = claimsByStatement.get(criterion);
18
+ let criterionKind;
19
+ let criterionRef;
20
+ if (claimRef) {
21
+ criterionKind = "claim_statement";
22
+ criterionRef = claimRef;
23
+ }
24
+ else {
25
+ const match = /^The current candidate satisfies the exact Source Fact (fact\.[a-z0-9._:-]+)\.$/u.exec(criterion);
26
+ if (!match || !facts.has(match[1]))
27
+ return null;
28
+ criterionKind = "semantic_fact";
29
+ criterionRef = match[1];
30
+ }
31
+ return {
32
+ outcome_ref: outcomeRef,
33
+ check_ref: checkRef,
34
+ position,
35
+ criterion_kind: criterionKind,
36
+ criterion_ref: criterionRef,
37
+ ...compactWithoutFields(assertion, ["criterion"]),
38
+ };
39
+ }
40
+ export function compactRevisionMap(rows, label) {
41
+ const result = new Map();
42
+ for (const row of rows) {
43
+ if (result.has(row.key))
44
+ throw new Error(`long_task_compact_authoring_invalid:${label}_revision_duplicate:${row.key}`);
45
+ result.set(row.key, row.revision_digest);
46
+ }
47
+ return result;
48
+ }
49
+ export function compactUniqueClaimStatements(claims) {
50
+ const result = new Map();
51
+ const duplicates = new Set();
52
+ for (const claim of claims) {
53
+ if (result.has(claim.statement)) {
54
+ result.delete(claim.statement);
55
+ duplicates.add(claim.statement);
56
+ }
57
+ else if (!duplicates.has(claim.statement))
58
+ result.set(claim.statement, claim.key);
59
+ }
60
+ return result;
61
+ }
62
+ export function assertSameCompactKeys(left, right, label) {
63
+ const a = [...new Set(left)].sort();
64
+ const b = [...new Set(right)].sort();
65
+ if (canonicalValueJson(a) !== canonicalValueJson(b))
66
+ throw new Error(`long_task_compact_authoring_invalid:${label}:${a.length}:${b.length}`);
67
+ }
@@ -0,0 +1,3 @@
1
+ import type { DeliveryContractV2 } from "./long-task-delivery-types.js";
2
+ import type { SemanticFactRevisionIdentityV1 } from "./semantic-fact-compact-carrier.js";
3
+ export declare function createLongTaskCompactContract(contractInput: DeliveryContractV2, factRevisions: SemanticFactRevisionIdentityV1[], obligationRevisions: SemanticFactRevisionIdentityV1[]): Record<string, unknown>;
@@ -0,0 +1,173 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { applyCompactAuthoringSelectors, compactAuthoringTable, compactCapacityBudget, compactDeterministicTemplates, compactWithoutFields as withoutFields, } from "./compact-authoring-support.js";
3
+ import { applyCompactSharedStructures } from "./compact-shared-structure-authoring.js";
4
+ import { longTaskCompactSharedStructureTargets } from "./long-task-compact-primitives.js";
5
+ import { canonicalValueJson } from "./strict-codec.js";
6
+ import { assertSameCompactKeys as assertSameKeys, compactAssertionProjection as assertionProjection, compactClaimProjection as claimProjection, compactRevisionMap as revisionMap, compactUniqueClaimStatements as uniqueClaimStatements, } from "./long-task-compact-authoring-projections.js";
7
+ export function createLongTaskCompactContract(contractInput, factRevisions, obligationRevisions) {
8
+ const contract = structuredClone(contractInput);
9
+ const factRevisionByKey = revisionMap(factRevisions, "fact");
10
+ const obligationRevisionByKey = revisionMap(obligationRevisions, "obligation");
11
+ const sourceClaims = structuredClone(contract.source_claims);
12
+ const revisionedContract = structuredClone(contractInput);
13
+ for (const outcome of revisionedContract.outcomes) {
14
+ for (const binding of outcome.semantic_fact_bindings.facts) {
15
+ const digest = factRevisionByKey.get(binding.fact_ref);
16
+ if (digest)
17
+ binding.fact_revision_digest = digest;
18
+ }
19
+ for (const binding of outcome.semantic_fact_bindings.proofs) {
20
+ const digest = obligationRevisionByKey.get(binding.proof_ref);
21
+ if (digest)
22
+ binding.obligation_revision_digest = digest;
23
+ }
24
+ }
25
+ const claimByStatement = uniqueClaimStatements(contract.source_claims);
26
+ const claimProjections = [];
27
+ const facts = [];
28
+ const proofBindings = [];
29
+ const assertionProjections = [];
30
+ const base = contract;
31
+ delete base.source_claims;
32
+ for (const outcome of contract.outcomes) {
33
+ for (const row of outcome.product.requirements)
34
+ claimProjections.push(claimProjection(outcome.key, "requirement", row, claimByStatement));
35
+ for (const row of outcome.technical.obligations)
36
+ claimProjections.push(claimProjection(outcome.key, "obligation", row, claimByStatement));
37
+ for (const row of outcome.technical.forbidden_shortcuts)
38
+ claimProjections.push(claimProjection(outcome.key, "forbidden_shortcut", row, claimByStatement));
39
+ for (const row of outcome.product.non_completing_outcomes)
40
+ claimProjections.push(claimProjection(outcome.key, "non_completing_outcome", row, claimByStatement));
41
+ delete outcome.product.requirements;
42
+ delete outcome.product
43
+ .non_completing_outcomes;
44
+ delete outcome.technical
45
+ .obligations;
46
+ delete outcome.technical
47
+ .forbidden_shortcuts;
48
+ for (const binding of outcome.semantic_fact_bindings.facts) {
49
+ const revision = factRevisionByKey.get(binding.fact_ref);
50
+ if (!revision)
51
+ throw new Error(`long_task_compact_authoring_invalid:fact_revision_missing:${binding.fact_ref}`);
52
+ facts.push({
53
+ outcome_ref: outcome.key,
54
+ manifest_ref: outcome.semantic_fact_bindings.manifest_ref,
55
+ fact_key: binding.fact_ref,
56
+ fact_revision_digest: revision,
57
+ claim_ref: binding.claim_ref,
58
+ applicability_ref: binding.applicability_ref,
59
+ });
60
+ }
61
+ for (const binding of outcome.semantic_fact_bindings.proofs) {
62
+ const revision = obligationRevisionByKey.get(binding.proof_ref);
63
+ if (!revision)
64
+ throw new Error(`long_task_compact_authoring_invalid:obligation_revision_missing:${binding.proof_ref}`);
65
+ proofBindings.push({
66
+ outcome_ref: outcome.key,
67
+ obligation_key: binding.proof_ref,
68
+ obligation_revision_digest: revision,
69
+ fact_key: binding.fact_ref,
70
+ ...withoutFields(binding, [
71
+ "proof_ref",
72
+ "fact_ref",
73
+ "obligation_revision_digest",
74
+ ]),
75
+ });
76
+ }
77
+ delete outcome
78
+ .semantic_fact_bindings;
79
+ for (const check of outcome.acceptance.checks) {
80
+ const retained = [];
81
+ for (const [position, assertion] of check.positive_assertions.entries()) {
82
+ const projection = assertionProjection(outcome.key, check.key, position, assertion, claimByStatement, factRevisionByKey);
83
+ if (projection)
84
+ assertionProjections.push(projection);
85
+ else
86
+ retained.push(assertion);
87
+ }
88
+ check.positive_assertions = retained;
89
+ }
90
+ }
91
+ assertSameKeys([...factRevisionByKey.keys()], facts.map((fact) => String(fact.fact_key)), "fact_set");
92
+ assertSameKeys([...obligationRevisionByKey.keys()], proofBindings.map((proof) => String(proof.obligation_key)), "obligation_set");
93
+ const proofTemplateExcludedFields = [
94
+ "outcome_ref",
95
+ "obligation_key",
96
+ "obligation_revision_digest",
97
+ "fact_key",
98
+ "assertion_ref",
99
+ "confirmation_ref",
100
+ ];
101
+ const proofFamilies = compactDeterministicTemplates(proofBindings, proofTemplateExcludedFields, "proof-template");
102
+ const proofFamilyByKey = new Map(proofFamilies.templates.map((template) => [template.key, template.value]));
103
+ const obligationRows = proofBindings.map((proof, index) => ({
104
+ outcome_ref: proof.outcome_ref,
105
+ obligation_key: proof.obligation_key,
106
+ obligation_revision_digest: proof.obligation_revision_digest,
107
+ fact_key: proof.fact_key,
108
+ template_ref: proofFamilies.template_refs[index],
109
+ overrides: withoutFields(proof, [
110
+ "outcome_ref",
111
+ "obligation_key",
112
+ "obligation_revision_digest",
113
+ "fact_key",
114
+ ...Object.keys(proofFamilyByKey.get(proofFamilies.template_refs[index])),
115
+ ]),
116
+ }));
117
+ const exceptions = claimProjections
118
+ .filter((row) => canonicalValueJson(row.required_proof_surfaces) !==
119
+ canonicalValueJson(["runtime_behavior"]) &&
120
+ row.required_proof_surfaces !== null)
121
+ .map((row) => ({
122
+ key: `exception.claim-projection.${row.projection_key}`,
123
+ target_ref: row.projection_key,
124
+ rationale: "This projection explicitly retains a non-default required proof-surface set.",
125
+ }));
126
+ base.compact_semantic_carrier = {
127
+ schema_version: "long-task-compact-carrier-v1",
128
+ capacity: {},
129
+ selectors: [],
130
+ shared_structures: [],
131
+ claim_catalog: compactAuthoringTable(sourceClaims),
132
+ claim_projections: compactAuthoringTable(claimProjections),
133
+ fact_sets: [
134
+ {
135
+ key: "fact-set.complete-contract",
136
+ ...compactAuthoringTable(facts),
137
+ },
138
+ ],
139
+ proof_templates: proofFamilies.templates.map((template) => ({
140
+ key: template.key,
141
+ binding: template.value,
142
+ })),
143
+ obligations: compactAuthoringTable(obligationRows),
144
+ assertion_projections: compactAuthoringTable(assertionProjections),
145
+ exceptions,
146
+ };
147
+ const { value, selectors } = applyCompactAuthoringSelectors(base);
148
+ const carrier = value.compact_semantic_carrier;
149
+ carrier.selectors = selectors;
150
+ const structures = applyCompactSharedStructures(longTaskCompactSharedStructureTargets(value, carrier));
151
+ carrier.shared_structures = structures.catalog;
152
+ const measured = {
153
+ claims: sourceClaims.length,
154
+ claim_projections: claimProjections.length,
155
+ selector_members: selectors.reduce((sum, selector) => sum + selector.members.length, 0),
156
+ structure_families: structures.statistics.emitted_family_count,
157
+ structure_references: structures.statistics.reference_count,
158
+ structure_arguments: structures.statistics.argument_count,
159
+ facts: facts.length,
160
+ obligations: obligationRows.length,
161
+ assertions: assertionProjections.length,
162
+ canonical_bytes: Buffer.byteLength(canonicalValueJson(revisionedContract), "utf8"),
163
+ };
164
+ carrier.capacity = {
165
+ theoretical_ground_universe: "not_materialized",
166
+ measured,
167
+ maximum: Object.fromEntries(Object.entries(measured).map(([name, count]) => [
168
+ name,
169
+ compactCapacityBudget(name, count),
170
+ ])),
171
+ };
172
+ return value;
173
+ }
@@ -0,0 +1,7 @@
1
+ import { type LongTaskCompactCapacityCounts } from "./long-task-compact-primitives.js";
2
+ export interface MaterializedLongTaskCompactCarrierV1 {
3
+ root: Record<string, unknown>;
4
+ measured: LongTaskCompactCapacityCounts;
5
+ }
6
+ export declare function materializeLongTaskCompactCarrier(rootInput: Record<string, unknown>): MaterializedLongTaskCompactCarrierV1;
7
+ export declare function materializeLongTaskCompactCarrierForMigration(rootInput: Record<string, unknown>): MaterializedLongTaskCompactCarrierV1;
@@ -0,0 +1,132 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { canonicalValueJson } from "./strict-codec.js";
3
+ import { materializeCanonicalCompactSharedStructures } from "./compact-shared-structure-validation.js";
4
+ import { parseLongTaskCompactCapacity, parseLongTaskCompactExceptions, parseLongTaskCompactFactSets, parseLongTaskCompactProofTemplates, parseLongTaskCompactSelectors, parseLongTaskCompactTable, } from "./long-task-compact-parser.js";
5
+ import { materializeLongTaskCompactAssertions, materializeLongTaskCompactClaimProjections, materializeLongTaskCompactFactBindings, prepareLongTaskCompactOutcomeTargets, } from "./long-task-compact-projections.js";
6
+ import { compactArray, compactFail, compactPlainObject, compactResolveSelectors, compactStableRef, compactStrictObject, compactUniqueRows, longTaskCompactSharedStructureTargets, validateLongTaskCompactCapacity, validateLongTaskCompactDeclaredMaximum, } from "./long-task-compact-primitives.js";
7
+ const VERSION = "long-task-compact-carrier-v1";
8
+ export function materializeLongTaskCompactCarrier(rootInput) {
9
+ return materializeLongTaskCompactCarrierInternal(rootInput, false);
10
+ }
11
+ export function materializeLongTaskCompactCarrierForMigration(rootInput) {
12
+ return materializeLongTaskCompactCarrierInternal(rootInput, true);
13
+ }
14
+ function materializeLongTaskCompactCarrierInternal(rootInput, allowLegacyCarrier) {
15
+ const label = "compact_semantic_carrier";
16
+ if (!Object.hasOwn(rootInput, label))
17
+ compactFail(label, "missing carrier");
18
+ if (Object.hasOwn(rootInput, "source_claims"))
19
+ compactFail(label, "expanded source_claims cannot coexist with compact carrier");
20
+ if (!Object.hasOwn(rootInput, "outcomes"))
21
+ compactFail(label, "v1 compact carrier requires inline outcomes");
22
+ const working = structuredClone(rootInput);
23
+ const carrierInput = compactPlainObject(working[label], label);
24
+ const hadSharedStructures = Object.hasOwn(carrierInput, "shared_structures");
25
+ if (!hadSharedStructures) {
26
+ if (!allowLegacyCarrier)
27
+ compactFail(`${label}.shared_structures`, "missing canonical catalog");
28
+ carrierInput.shared_structures = [];
29
+ addLegacyStructureCapacityFields(carrierInput.capacity);
30
+ }
31
+ const carrier = compactStrictObject(carrierInput, label, [
32
+ "schema_version",
33
+ "capacity",
34
+ "selectors",
35
+ "shared_structures",
36
+ "claim_catalog",
37
+ "claim_projections",
38
+ "fact_sets",
39
+ "proof_templates",
40
+ "obligations",
41
+ "assertion_projections",
42
+ "exceptions",
43
+ ]);
44
+ if (carrier.schema_version !== VERSION)
45
+ compactFail(`${label}.schema_version`, `must be ${VERSION}`);
46
+ const capacity = parseLongTaskCompactCapacity(carrier.capacity, `${label}.capacity`);
47
+ validateLongTaskCompactDeclaredMaximum(capacity.maximum, label);
48
+ const structureStatistics = hadSharedStructures
49
+ ? materializeCanonicalCompactSharedStructures(longTaskCompactSharedStructureTargets(working, carrier), carrier.shared_structures, label)
50
+ : {
51
+ emitted_family_count: 0,
52
+ reference_count: 0,
53
+ argument_count: 0,
54
+ };
55
+ const selectors = parseLongTaskCompactSelectors(carrier.selectors, `${label}.selectors`);
56
+ const claims = parseLongTaskCompactTable(carrier.claim_catalog, selectors, `${label}.claim_catalog`);
57
+ compactUniqueRows(claims, "key", `${label}.claim_catalog`);
58
+ const claimByKey = new Map(claims.map((claim) => [
59
+ compactStableRef(claim.key, `${label}.claim.key`),
60
+ claim,
61
+ ]));
62
+ const claimProjections = parseLongTaskCompactTable(carrier.claim_projections, selectors, `${label}.claim_projections`);
63
+ const facts = parseLongTaskCompactFactSets(carrier.fact_sets, selectors, `${label}.fact_sets`);
64
+ compactUniqueRows(facts, "fact_key", `${label}.facts`);
65
+ const factByKey = new Map(facts.map((fact) => [
66
+ compactStableRef(fact.fact_key, `${label}.fact.fact_key`),
67
+ fact,
68
+ ]));
69
+ const proofTemplates = parseLongTaskCompactProofTemplates(carrier.proof_templates, selectors, `${label}.proof_templates`);
70
+ const obligations = parseLongTaskCompactTable(carrier.obligations, selectors, `${label}.obligations`);
71
+ compactUniqueRows(obligations, "obligation_key", `${label}.obligations`);
72
+ const assertions = parseLongTaskCompactTable(carrier.assertion_projections, selectors, `${label}.assertion_projections`);
73
+ const exceptions = parseLongTaskCompactExceptions(carrier.exceptions, `${label}.exceptions`);
74
+ validateCompactProjectionExceptions(claimProjections, exceptions, `${label}.exceptions`);
75
+ const { compact_semantic_carrier: _carrier, ...base } = working;
76
+ const expanded = compactPlainObject(compactResolveSelectors(structuredClone(base), selectors, "$"), "$");
77
+ expanded.source_claims = claims;
78
+ const outcomes = compactArray(expanded.outcomes, "outcomes").map((item, index) => compactPlainObject(item, `outcomes[${index}]`));
79
+ const outcomeByKey = new Map(outcomes.map((outcome, index) => [
80
+ compactStableRef(outcome.key, `outcomes[${index}].key`),
81
+ outcome,
82
+ ]));
83
+ prepareLongTaskCompactOutcomeTargets(outcomes);
84
+ materializeLongTaskCompactClaimProjections(claimProjections, claimByKey, outcomeByKey);
85
+ materializeLongTaskCompactFactBindings(facts, obligations, factByKey, proofTemplates, outcomeByKey);
86
+ materializeLongTaskCompactAssertions(assertions, claimByKey, factByKey, outcomeByKey);
87
+ expanded.outcomes = outcomes;
88
+ const measured = {
89
+ claims: claims.length,
90
+ claim_projections: claimProjections.length,
91
+ selector_members: [...selectors.values()].reduce((sum, members) => sum + members.length, 0),
92
+ structure_families: structureStatistics.emitted_family_count,
93
+ structure_references: structureStatistics.reference_count,
94
+ structure_arguments: structureStatistics.argument_count,
95
+ facts: facts.length,
96
+ obligations: obligations.length,
97
+ assertions: assertions.length,
98
+ canonical_bytes: Buffer.byteLength(canonicalValueJson(expanded), "utf8"),
99
+ };
100
+ validateLongTaskCompactCapacity(capacity, measured, label);
101
+ return { root: expanded, measured };
102
+ }
103
+ function addLegacyStructureCapacityFields(value) {
104
+ if (!value || typeof value !== "object" || Array.isArray(value))
105
+ return;
106
+ const capacity = value;
107
+ for (const field of ["measured", "maximum"]) {
108
+ const counts = capacity[field];
109
+ if (!counts || typeof counts !== "object" || Array.isArray(counts))
110
+ continue;
111
+ const row = counts;
112
+ row.structure_families = 0;
113
+ row.structure_references = 0;
114
+ row.structure_arguments = 0;
115
+ }
116
+ }
117
+ function validateCompactProjectionExceptions(projections, exceptions, label) {
118
+ const expected = projections
119
+ .filter((projection) => {
120
+ const surfaces = projection.required_proof_surfaces;
121
+ return (surfaces !== null &&
122
+ (!Array.isArray(surfaces) ||
123
+ surfaces.length !== 1 ||
124
+ surfaces[0] !== "runtime_behavior"));
125
+ })
126
+ .map((projection, index) => compactStableRef(projection.projection_key, `${label}.projection[${index}].projection_key`))
127
+ .sort();
128
+ const actual = exceptions.map((item) => item.target_ref).sort();
129
+ if (new Set(actual).size !== actual.length ||
130
+ canonicalValueJson(expected) !== canonicalValueJson(actual))
131
+ compactFail(label, `projection target set mismatch: ${actual.length}:${expected.length}`);
132
+ }
@@ -0,0 +1,14 @@
1
+ import { type LongTaskCompactCapacityCounts } from "./long-task-compact-primitives.js";
2
+ export declare function parseLongTaskCompactFactSets(value: unknown, selectors: Map<string, string[]>, label: string): Record<string, unknown>[];
3
+ export declare function parseLongTaskCompactProofTemplates(value: unknown, selectors: Map<string, string[]>, label: string): Map<string, Record<string, unknown>>;
4
+ export declare function parseLongTaskCompactCapacity(value: unknown, label: string): {
5
+ measured: LongTaskCompactCapacityCounts;
6
+ maximum: LongTaskCompactCapacityCounts;
7
+ };
8
+ export declare function parseLongTaskCompactSelectors(value: unknown, label: string): Map<string, string[]>;
9
+ export declare function parseLongTaskCompactTable(value: unknown, selectors: Map<string, string[]>, label: string): Record<string, unknown>[];
10
+ export declare function parseLongTaskCompactExceptions(value: unknown, label: string): Array<{
11
+ key: string;
12
+ target_ref: string;
13
+ rationale: string;
14
+ }>;
@@ -0,0 +1,123 @@
1
+ import { LONG_TASK_COMPACT_CAPACITY_FIELDS, compactArray, compactFail, compactInteger, compactNonemptyString, compactPlainObject, compactResolveSelectors, compactStableRef, compactStableRefs, compactStrictObject, } from "./long-task-compact-primitives.js";
2
+ export function parseLongTaskCompactFactSets(value, selectors, label) {
3
+ const result = [];
4
+ const keys = new Set();
5
+ for (const [index, item] of compactArray(value, label).entries()) {
6
+ const itemLabel = `${label}[${index}]`;
7
+ const row = compactStrictObject(item, itemLabel, [
8
+ "key",
9
+ "defaults",
10
+ "columns",
11
+ "rows",
12
+ ]);
13
+ const key = compactStableRef(row.key, `${itemLabel}.key`);
14
+ if (keys.has(key))
15
+ compactFail(itemLabel, `duplicate key: ${key}`);
16
+ keys.add(key);
17
+ result.push(...parseLongTaskCompactTable({ defaults: row.defaults, columns: row.columns, rows: row.rows }, selectors, itemLabel));
18
+ }
19
+ return result;
20
+ }
21
+ export function parseLongTaskCompactProofTemplates(value, selectors, label) {
22
+ const result = new Map();
23
+ for (const [index, item] of compactArray(value, label).entries()) {
24
+ const itemLabel = `${label}[${index}]`;
25
+ const row = compactStrictObject(item, itemLabel, ["key", "binding"]);
26
+ const key = compactStableRef(row.key, `${itemLabel}.key`);
27
+ if (result.has(key))
28
+ compactFail(itemLabel, `duplicate key: ${key}`);
29
+ const binding = compactPlainObject(compactResolveSelectors(row.binding, selectors, `${itemLabel}.binding`), `${itemLabel}.binding`);
30
+ if (["proof_ref", "fact_ref"].some((field) => Object.hasOwn(binding, field)))
31
+ compactFail(`${itemLabel}.binding`, "identity fields belong to rows");
32
+ result.set(key, binding);
33
+ }
34
+ return result;
35
+ }
36
+ export function parseLongTaskCompactCapacity(value, label) {
37
+ const row = compactStrictObject(value, label, [
38
+ "theoretical_ground_universe",
39
+ "measured",
40
+ "maximum",
41
+ ]);
42
+ if (row.theoretical_ground_universe !== "not_materialized")
43
+ compactFail(`${label}.theoretical_ground_universe`, "must be not_materialized");
44
+ return {
45
+ measured: capacityCounts(row.measured, `${label}.measured`),
46
+ maximum: capacityCounts(row.maximum, `${label}.maximum`),
47
+ };
48
+ }
49
+ function capacityCounts(value, label) {
50
+ const row = compactStrictObject(value, label, [
51
+ ...LONG_TASK_COMPACT_CAPACITY_FIELDS,
52
+ ]);
53
+ return Object.fromEntries(LONG_TASK_COMPACT_CAPACITY_FIELDS.map((field) => [
54
+ field,
55
+ compactInteger(row[field], `${label}.${field}`),
56
+ ]));
57
+ }
58
+ export function parseLongTaskCompactSelectors(value, label) {
59
+ const result = new Map();
60
+ for (const [index, item] of compactArray(value, label).entries()) {
61
+ const itemLabel = `${label}[${index}]`;
62
+ const row = compactStrictObject(item, itemLabel, ["key", "members"]);
63
+ const key = compactStableRef(row.key, `${itemLabel}.key`);
64
+ const members = compactStableRefs(row.members, `${itemLabel}.members`);
65
+ if (result.has(key))
66
+ compactFail(itemLabel, `duplicate key: ${key}`);
67
+ if (new Set(members).size !== members.length)
68
+ compactFail(`${itemLabel}.members`, "members must be unique");
69
+ result.set(key, members);
70
+ }
71
+ return result;
72
+ }
73
+ export function parseLongTaskCompactTable(value, selectors, label) {
74
+ const table = compactStrictObject(value, label, [
75
+ "defaults",
76
+ "columns",
77
+ "rows",
78
+ ]);
79
+ const defaults = compactPlainObject(compactResolveSelectors(table.defaults, selectors, `${label}.defaults`), `${label}.defaults`);
80
+ const columns = compactArray(table.columns, `${label}.columns`).map((item, index) => {
81
+ const column = compactNonemptyString(item, `${label}.columns[${index}]`);
82
+ if (!/^[a-z][a-z0-9_]*$/u.test(column))
83
+ compactFail(`${label}.columns[${index}]`, "invalid column name");
84
+ return column;
85
+ });
86
+ if (new Set(columns).size !== columns.length)
87
+ compactFail(`${label}.columns`, "columns must be unique");
88
+ for (const column of columns)
89
+ if (Object.hasOwn(defaults, column))
90
+ compactFail(`${label}.columns`, `column duplicates default: ${column}`);
91
+ return compactArray(table.rows, `${label}.rows`).map((item, index) => {
92
+ const values = compactArray(item, `${label}.rows[${index}]`);
93
+ if (values.length !== columns.length)
94
+ compactFail(`${label}.rows[${index}]`, `column count mismatch: ${values.length}:${columns.length}`);
95
+ return {
96
+ ...defaults,
97
+ ...Object.fromEntries(columns.map((column, columnIndex) => [
98
+ column,
99
+ compactResolveSelectors(values[columnIndex], selectors, `${label}.rows[${index}][${columnIndex}]`),
100
+ ])),
101
+ };
102
+ });
103
+ }
104
+ export function parseLongTaskCompactExceptions(value, label) {
105
+ const result = [];
106
+ const seen = new Set();
107
+ for (const [index, item] of compactArray(value, label).entries()) {
108
+ const itemLabel = `${label}[${index}]`;
109
+ const row = compactStrictObject(item, itemLabel, [
110
+ "key",
111
+ "target_ref",
112
+ "rationale",
113
+ ]);
114
+ const key = compactStableRef(row.key, `${itemLabel}.key`);
115
+ const targetRef = compactStableRef(row.target_ref, `${itemLabel}.target_ref`);
116
+ const rationale = compactNonemptyString(row.rationale, `${itemLabel}.rationale`);
117
+ if (seen.has(key))
118
+ compactFail(itemLabel, `duplicate key: ${key}`);
119
+ seen.add(key);
120
+ result.push({ key, target_ref: targetRef, rationale });
121
+ }
122
+ return result;
123
+ }
@@ -0,0 +1,22 @@
1
+ export { longTaskCompactSharedStructureTargets } from "./long-task-compact-structure-targets.js";
2
+ export declare const LONG_TASK_COMPACT_CAPACITY_FIELDS: readonly ["claims", "claim_projections", "selector_members", "structure_families", "structure_references", "structure_arguments", "facts", "obligations", "assertions", "canonical_bytes"];
3
+ type CapacityField = (typeof LONG_TASK_COMPACT_CAPACITY_FIELDS)[number];
4
+ export type LongTaskCompactCapacityCounts = Record<CapacityField, number>;
5
+ export declare function compactRequiredOutcome(value: unknown, outcomes: Map<string, Record<string, unknown>>, label: string): Record<string, unknown>;
6
+ export declare function compactResolveSelectors(value: unknown, selectors: Map<string, string[]>, label: string): unknown;
7
+ export declare function validateLongTaskCompactCapacity(capacity: {
8
+ measured: LongTaskCompactCapacityCounts;
9
+ maximum: LongTaskCompactCapacityCounts;
10
+ }, measured: LongTaskCompactCapacityCounts, label: string): void;
11
+ export declare function validateLongTaskCompactDeclaredMaximum(maximum: LongTaskCompactCapacityCounts, label: string): void;
12
+ export declare function compactUniqueRows(rows: Record<string, unknown>[], field: string, label: string): void;
13
+ export declare function compactStrictObject(value: unknown, label: string, fields: string[]): Record<string, unknown>;
14
+ export declare function compactPlainObject(value: unknown, label: string): Record<string, unknown>;
15
+ export declare function compactArray(value: unknown, label: string): unknown[];
16
+ export declare function compactStableRef(value: unknown, label: string): string;
17
+ export declare function compactStableRefs(value: unknown, label: string): string[];
18
+ export declare function compactSha256(value: unknown, label: string): string;
19
+ export declare function compactNonemptyString(value: unknown, label: string): string;
20
+ export declare function compactInteger(value: unknown, label: string): number;
21
+ export declare function compactLiteral<T extends string>(value: unknown, values: readonly T[], label: string): T;
22
+ export declare function compactFail(label: string, message: string): never;