project-tiny-context-harness 0.8.4 → 0.8.6

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 (254) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +394 -363
  3. package/assets/README.md +570 -514
  4. package/assets/README.zh-CN.md +331 -300
  5. package/assets/agents/.gitkeep +1 -1
  6. package/assets/agents/AGENTS_CORE.md +45 -25
  7. package/assets/context_templates/architecture.md +26 -25
  8. package/assets/context_templates/area.md +32 -31
  9. package/assets/context_templates/context.toml +30 -24
  10. package/assets/context_templates/deployment.md +35 -35
  11. package/assets/context_templates/global.md +57 -57
  12. package/assets/context_templates/product-surface-contract.md +70 -70
  13. package/assets/context_templates/screen-contract.md +189 -189
  14. package/assets/context_templates/verification.md +31 -30
  15. package/assets/github/.gitkeep +1 -1
  16. package/assets/github/harness.yml +39 -39
  17. package/assets/make/.gitkeep +1 -1
  18. package/assets/make/ty-context.mk +48 -48
  19. package/assets/skills/context_development_engineer/SKILL.md +155 -122
  20. package/assets/skills/context_full_project_export/SKILL.md +28 -28
  21. package/assets/skills/context_harness_upgrade/SKILL.md +60 -60
  22. package/assets/skills/context_product_plan/SKILL.md +99 -79
  23. package/assets/skills/context_surface_contract/SKILL.md +191 -191
  24. package/assets/skills/context_uiux_design/SKILL.md +171 -171
  25. package/assets/skills/design-resource-authoring/SKILL.md +86 -84
  26. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +138 -123
  27. package/assets/skills/design-resource-authoring/references/open-design-provider.md +132 -127
  28. package/assets/skills/design-resource-authoring/references/resource-selection.md +181 -154
  29. package/assets/skills/design-system-authoring/SKILL.md +57 -57
  30. package/assets/skills/design-system-authoring/agents/openai.yaml +6 -6
  31. package/assets/skills/design-system-authoring/references/authority-adoption.md +48 -48
  32. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +110 -110
  33. package/assets/skills/long-task-workflow/SKILL.md +98 -92
  34. package/assets/skills/long-task-workflow/agents/openai.yaml +3 -1
  35. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +72 -72
  36. package/assets/skills/long-task-workflow/references/contract-authoring.md +122 -101
  37. package/assets/skills/long-task-workflow/references/evidence-design.md +82 -61
  38. package/assets/skills/long-task-workflow/references/source-authoring.md +109 -90
  39. package/assets/skills/source-plan-authoring/SKILL.md +14 -14
  40. package/assets/tools/validate_context.py +442 -442
  41. package/dist/commands/long-task-authoring.js +27 -2
  42. package/dist/lib/context-default-footprint.js +2 -0
  43. package/dist/lib/context-manifest.js +6 -0
  44. package/dist/lib/context-templates.js +1 -1
  45. package/dist/lib/design-resource-fact-enums.d.ts +20 -0
  46. package/dist/lib/design-resource-fact-enums.js +170 -0
  47. package/dist/lib/design-resource-fact-locator-extractors.d.ts +8 -0
  48. package/dist/lib/design-resource-fact-locator-extractors.js +108 -0
  49. package/dist/lib/design-resource-fact-locator-resolver.d.ts +3 -0
  50. package/dist/lib/design-resource-fact-locator-resolver.js +112 -0
  51. package/dist/lib/design-resource-fact-locator-validation.d.ts +5 -0
  52. package/dist/lib/design-resource-fact-locator-validation.js +16 -0
  53. package/dist/lib/design-resource-fact-manifest-catalog.d.ts +4 -0
  54. package/dist/lib/design-resource-fact-manifest-catalog.js +249 -0
  55. package/dist/lib/design-resource-fact-manifest-model.d.ts +91 -0
  56. package/dist/lib/design-resource-fact-manifest-model.js +21 -0
  57. package/dist/lib/design-resource-fact-manifest-shape-axes.d.ts +6 -0
  58. package/dist/lib/design-resource-fact-manifest-shape-axes.js +159 -0
  59. package/dist/lib/design-resource-fact-manifest-shape-evidence.d.ts +4 -0
  60. package/dist/lib/design-resource-fact-manifest-shape-evidence.js +59 -0
  61. package/dist/lib/design-resource-fact-manifest-shape-facts.d.ts +4 -0
  62. package/dist/lib/design-resource-fact-manifest-shape-facts.js +109 -0
  63. package/dist/lib/design-resource-fact-manifest-shape-inspector.d.ts +5 -0
  64. package/dist/lib/design-resource-fact-manifest-shape-inspector.js +144 -0
  65. package/dist/lib/design-resource-fact-manifest-shape.d.ts +7 -0
  66. package/dist/lib/design-resource-fact-manifest-shape.js +75 -0
  67. package/dist/lib/design-resource-fact-manifest-types.d.ts +3 -0
  68. package/dist/lib/design-resource-fact-manifest-types.js +3 -0
  69. package/dist/lib/design-resource-fact-manifest-universe.d.ts +5 -0
  70. package/dist/lib/design-resource-fact-manifest-universe.js +50 -0
  71. package/dist/lib/design-resource-fact-manifest-validation.d.ts +3 -0
  72. package/dist/lib/design-resource-fact-manifest-validation.js +106 -0
  73. package/dist/lib/design-resource-fact-policy.d.ts +18 -0
  74. package/dist/lib/design-resource-fact-policy.js +72 -1
  75. package/dist/lib/design-resource-fact-property-methods.d.ts +3 -0
  76. package/dist/lib/design-resource-fact-property-methods.js +158 -0
  77. package/dist/lib/design-resource-fact-shape-primitives.d.ts +3 -0
  78. package/dist/lib/design-resource-fact-shape-primitives.js +18 -0
  79. package/dist/lib/design-resource-fact-types.d.ts +164 -0
  80. package/dist/lib/design-resource-fact-types.js +1 -0
  81. package/dist/lib/design-resource-fact-universe-assets.d.ts +4 -0
  82. package/dist/lib/design-resource-fact-universe-assets.js +71 -0
  83. package/dist/lib/design-resource-fact-universe-catalog.d.ts +4 -0
  84. package/dist/lib/design-resource-fact-universe-catalog.js +151 -0
  85. package/dist/lib/design-resource-fact-universe-conditions.d.ts +2 -0
  86. package/dist/lib/design-resource-fact-universe-conditions.js +92 -0
  87. package/dist/lib/design-resource-fact-universe-facts.d.ts +4 -0
  88. package/dist/lib/design-resource-fact-universe-facts.js +108 -0
  89. package/dist/lib/design-resource-fact-universe-helpers.d.ts +30 -0
  90. package/dist/lib/design-resource-fact-universe-helpers.js +167 -0
  91. package/dist/lib/design-resource-fact-universe-inspector.d.ts +7 -0
  92. package/dist/lib/design-resource-fact-universe-inspector.js +119 -0
  93. package/dist/lib/design-resource-fact-universe-proof.d.ts +4 -0
  94. package/dist/lib/design-resource-fact-universe-proof.js +113 -0
  95. package/dist/lib/design-resource-fact-universe-subjects.d.ts +5 -0
  96. package/dist/lib/design-resource-fact-universe-subjects.js +97 -0
  97. package/dist/lib/design-resource-fact-universe-variations.d.ts +2 -0
  98. package/dist/lib/design-resource-fact-universe-variations.js +75 -0
  99. package/dist/lib/design-resource-fact-value-validation.d.ts +2 -0
  100. package/dist/lib/design-resource-fact-value-validation.js +80 -0
  101. package/dist/lib/design-resource-handoff-file-primitives.js +2 -0
  102. package/dist/lib/design-resource-handoff-file-validation.js +13 -100
  103. package/dist/lib/design-resource-handoff-policy.d.ts +1 -0
  104. package/dist/lib/design-resource-handoff-policy.js +118 -11
  105. package/dist/lib/design-resource-handoff-shape-evidence.js +46 -3
  106. package/dist/lib/design-resource-handoff-shape-primitives.d.ts +5 -0
  107. package/dist/lib/design-resource-handoff-shape-primitives.js +28 -0
  108. package/dist/lib/design-resource-handoff-shape-structure.js +143 -22
  109. package/dist/lib/design-resource-handoff-shape.js +25 -0
  110. package/dist/lib/design-resource-handoff-types.d.ts +97 -21
  111. package/dist/lib/design-resource-handoff-types.js +22 -0
  112. package/dist/lib/design-resource-handoff-validation-coverage.d.ts +1 -1
  113. package/dist/lib/design-resource-handoff-validation-coverage.js +145 -118
  114. package/dist/lib/design-resource-handoff-validation-fact-cells.d.ts +2 -0
  115. package/dist/lib/design-resource-handoff-validation-fact-cells.js +60 -0
  116. package/dist/lib/design-resource-handoff-validation-fact-records.d.ts +2 -0
  117. package/dist/lib/design-resource-handoff-validation-fact-records.js +90 -0
  118. package/dist/lib/design-resource-handoff-validation-facts.js +10 -94
  119. package/dist/lib/design-resource-handoff-validation-proofs.d.ts +2 -0
  120. package/dist/lib/design-resource-handoff-validation-proofs.js +67 -0
  121. package/dist/lib/design-resource-handoff-validation-resource-closure.d.ts +3 -0
  122. package/dist/lib/design-resource-handoff-validation-resource-closure.js +88 -0
  123. package/dist/lib/design-resource-handoff-validation-structure.js +43 -14
  124. package/dist/lib/design-resource-handoff-validation.js +32 -0
  125. package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +2 -1
  126. package/dist/lib/design-resource-handoff-web-dependency-validation.js +67 -7
  127. package/dist/lib/execution-target-capabilities.d.ts +1 -1
  128. package/dist/lib/execution-target-capabilities.js +14 -0
  129. package/dist/lib/long-task-activation-validation.js +6 -2
  130. package/dist/lib/long-task-applicability-shape.js +3 -3
  131. package/dist/lib/long-task-authoring-authority-preview.js +1 -0
  132. package/dist/lib/long-task-authority-policy.d.ts +1 -0
  133. package/dist/lib/long-task-authority-policy.js +1 -0
  134. package/dist/lib/long-task-authority.js +13 -0
  135. package/dist/lib/long-task-claim-definitions.js +13 -1
  136. package/dist/lib/long-task-claims.js +23 -1
  137. package/dist/lib/long-task-contract-types.d.ts +3 -0
  138. package/dist/lib/long-task-delivery-compiler.js +1 -0
  139. package/dist/lib/long-task-delivery-parser.js +11 -1
  140. package/dist/lib/long-task-delivery-types.d.ts +1 -0
  141. package/dist/lib/long-task-delivery-types.js +1 -0
  142. package/dist/lib/long-task-delivery-validation.js +17 -0
  143. package/dist/lib/long-task-design-resource-handoff.js +62 -38
  144. package/dist/lib/long-task-design-target-capabilities.d.ts +14 -0
  145. package/dist/lib/long-task-design-target-capabilities.js +126 -0
  146. package/dist/lib/long-task-evidence-capability-codec.d.ts +94 -0
  147. package/dist/lib/long-task-evidence-capability-codec.js +395 -22
  148. package/dist/lib/long-task-evidence-capability-policy.js +18 -0
  149. package/dist/lib/long-task-evidence-capability-runtime.js +78 -0
  150. package/dist/lib/long-task-evidence-capability-types.d.ts +114 -1
  151. package/dist/lib/long-task-outcome-parser.js +4 -0
  152. package/dist/lib/long-task-playwright-capability-records.d.ts +5 -0
  153. package/dist/lib/long-task-playwright-capability-records.js +146 -0
  154. package/dist/lib/long-task-playwright-case-evidence.d.ts +3 -2
  155. package/dist/lib/long-task-playwright-case-evidence.js +10 -79
  156. package/dist/lib/long-task-playwright-case-primitives.d.ts +28 -0
  157. package/dist/lib/long-task-playwright-case-primitives.js +143 -0
  158. package/dist/lib/long-task-playwright-evidence.d.ts +1 -1
  159. package/dist/lib/long-task-playwright-evidence.js +10 -75
  160. package/dist/lib/long-task-runner-freeze.d.ts +2 -2
  161. package/dist/lib/long-task-runner-freeze.js +15 -1
  162. package/dist/lib/long-task-runtime-types.d.ts +4 -1
  163. package/dist/lib/long-task-semantic-contract-types.d.ts +1 -1
  164. package/dist/lib/long-task-semantic-drift-migration.js +2 -2
  165. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +57 -0
  166. package/dist/lib/long-task-semantic-fact-binding-types.js +1 -0
  167. package/dist/lib/long-task-semantic-fact-closure-primitives.d.ts +5 -0
  168. package/dist/lib/long-task-semantic-fact-closure-primitives.js +43 -0
  169. package/dist/lib/long-task-semantic-fact-closure.d.ts +13 -0
  170. package/dist/lib/long-task-semantic-fact-closure.js +48 -0
  171. package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +4 -0
  172. package/dist/lib/long-task-semantic-fact-contract-closure.js +24 -0
  173. package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +4 -0
  174. package/dist/lib/long-task-semantic-fact-contract-facts.js +30 -0
  175. package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +4 -0
  176. package/dist/lib/long-task-semantic-fact-contract-proofs.js +97 -0
  177. package/dist/lib/long-task-semantic-fact-evidence.d.ts +21 -0
  178. package/dist/lib/long-task-semantic-fact-evidence.js +165 -0
  179. package/dist/lib/long-task-semantic-fact-input-closure.d.ts +4 -0
  180. package/dist/lib/long-task-semantic-fact-input-closure.js +101 -0
  181. package/dist/lib/long-task-semantic-fact-provenance-closure.d.ts +4 -0
  182. package/dist/lib/long-task-semantic-fact-provenance-closure.js +140 -0
  183. package/dist/lib/long-task-semantic-fact-shape.d.ts +3 -0
  184. package/dist/lib/long-task-semantic-fact-shape.js +89 -0
  185. package/dist/lib/long-task-semantic-fact-value-closure.d.ts +3 -0
  186. package/dist/lib/long-task-semantic-fact-value-closure.js +110 -0
  187. package/dist/lib/long-task-shape-primitives.d.ts +2 -1
  188. package/dist/lib/long-task-shape-primitives.js +7 -0
  189. package/dist/lib/long-task-source-item-parser.js +25 -6
  190. package/dist/lib/long-task-source-target-continuity.js +4 -1
  191. package/dist/lib/long-task-source-target-index.d.ts +1 -1
  192. package/dist/lib/long-task-source-target-index.js +5 -1
  193. package/dist/lib/long-task-ui-design-policy.js +8 -4
  194. package/dist/lib/long-task-ui-surface-shape.js +83 -1
  195. package/dist/lib/long-task-ui-surface-types.d.ts +29 -0
  196. package/dist/lib/modularity.js +7 -1
  197. package/dist/lib/semantic-fact-base-types.d.ts +14 -0
  198. package/dist/lib/semantic-fact-base-types.js +1 -0
  199. package/dist/lib/semantic-fact-catalog.d.ts +8 -0
  200. package/dist/lib/semantic-fact-catalog.js +191 -0
  201. package/dist/lib/semantic-fact-condition-shape.d.ts +48 -0
  202. package/dist/lib/semantic-fact-condition-shape.js +111 -0
  203. package/dist/lib/semantic-fact-input-shape.d.ts +34 -0
  204. package/dist/lib/semantic-fact-input-shape.js +111 -0
  205. package/dist/lib/semantic-fact-inventory-types.d.ts +147 -0
  206. package/dist/lib/semantic-fact-inventory-types.js +1 -0
  207. package/dist/lib/semantic-fact-manifest-shape.d.ts +4 -0
  208. package/dist/lib/semantic-fact-manifest-shape.js +135 -0
  209. package/dist/lib/semantic-fact-manifest-types.d.ts +58 -0
  210. package/dist/lib/semantic-fact-manifest-types.js +19 -0
  211. package/dist/lib/semantic-fact-policy-authority.d.ts +8 -0
  212. package/dist/lib/semantic-fact-policy-authority.js +79 -0
  213. package/dist/lib/semantic-fact-policy-census.d.ts +2 -0
  214. package/dist/lib/semantic-fact-policy-census.js +80 -0
  215. package/dist/lib/semantic-fact-policy-condition-references.d.ts +7 -0
  216. package/dist/lib/semantic-fact-policy-condition-references.js +19 -0
  217. package/dist/lib/semantic-fact-policy-conditions.d.ts +2 -0
  218. package/dist/lib/semantic-fact-policy-conditions.js +105 -0
  219. package/dist/lib/semantic-fact-policy-facts.d.ts +3 -0
  220. package/dist/lib/semantic-fact-policy-facts.js +73 -0
  221. package/dist/lib/semantic-fact-policy-primitives.d.ts +26 -0
  222. package/dist/lib/semantic-fact-policy-primitives.js +169 -0
  223. package/dist/lib/semantic-fact-policy-proofs.d.ts +2 -0
  224. package/dist/lib/semantic-fact-policy-proofs.js +75 -0
  225. package/dist/lib/semantic-fact-policy-properties.d.ts +3 -0
  226. package/dist/lib/semantic-fact-policy-properties.js +84 -0
  227. package/dist/lib/semantic-fact-policy-units.d.ts +4 -0
  228. package/dist/lib/semantic-fact-policy-units.js +103 -0
  229. package/dist/lib/semantic-fact-policy.d.ts +17 -0
  230. package/dist/lib/semantic-fact-policy.js +41 -0
  231. package/dist/lib/semantic-fact-proof-shape.d.ts +51 -0
  232. package/dist/lib/semantic-fact-proof-shape.js +121 -0
  233. package/dist/lib/semantic-fact-proof-types.d.ts +74 -0
  234. package/dist/lib/semantic-fact-proof-types.js +1 -0
  235. package/dist/lib/semantic-fact-property-shape.d.ts +29 -0
  236. package/dist/lib/semantic-fact-property-shape.js +77 -0
  237. package/dist/lib/semantic-fact-shape-constants.d.ts +3 -0
  238. package/dist/lib/semantic-fact-shape-constants.js +38 -0
  239. package/dist/lib/semantic-fact-shape-primitives.d.ts +15 -0
  240. package/dist/lib/semantic-fact-shape-primitives.js +68 -0
  241. package/dist/lib/semantic-fact-source-parser.d.ts +9 -0
  242. package/dist/lib/semantic-fact-source-parser.js +46 -0
  243. package/dist/lib/semantic-fact-support-shape.d.ts +21 -0
  244. package/dist/lib/semantic-fact-support-shape.js +59 -0
  245. package/dist/lib/semantic-fact-types.d.ts +5 -0
  246. package/dist/lib/semantic-fact-types.js +5 -0
  247. package/dist/lib/semantic-fact-unit-shape.d.ts +34 -0
  248. package/dist/lib/semantic-fact-unit-shape.js +89 -0
  249. package/dist/lib/semantic-fact-value-shape.d.ts +12 -0
  250. package/dist/lib/semantic-fact-value-shape.js +39 -0
  251. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +1339 -131
  252. package/migrations/README.md +15 -15
  253. package/package.json +84 -84
  254. package/source-mappings.yaml +25 -25
@@ -0,0 +1,77 @@
1
+ import { EVIDENCE_CAPABILITIES } from "./long-task-shape-primitives.js";
2
+ import { SEMANTIC_FACT_VALUE_KINDS } from "./semantic-fact-shape-constants.js";
3
+ import { semanticArray, semanticLiteral, semanticNullable, semanticObject, semanticStableRef, semanticStableRefs, semanticString, } from "./semantic-fact-shape-primitives.js";
4
+ import { parseSemanticFactBoolean } from "./semantic-fact-value-shape.js";
5
+ export function parseSemanticFactPropertyDispositions(value, label) {
6
+ return semanticArray(value, label).map((item, index) => {
7
+ const itemLabel = `${label}[${index}]`;
8
+ const row = semanticObject(item, itemLabel, [
9
+ "key",
10
+ "family_ref",
11
+ "property",
12
+ "standard",
13
+ "value_kind",
14
+ "required_methods",
15
+ "required_evidence_capabilities",
16
+ "applicable_unit_refs",
17
+ "not_applicable_unit_refs",
18
+ "decision_required_unit_refs",
19
+ "unavailable_unit_refs",
20
+ "condition_refs",
21
+ "source_item_refs",
22
+ "basis_refs",
23
+ "rationale",
24
+ ]);
25
+ return {
26
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
27
+ family_ref: semanticStableRef(row.family_ref, `${itemLabel}.family_ref`),
28
+ property: semanticStableRef(row.property, `${itemLabel}.property`),
29
+ standard: parseSemanticFactBoolean(row.standard, `${itemLabel}.standard`),
30
+ value_kind: semanticLiteral(row.value_kind, SEMANTIC_FACT_VALUE_KINDS, `${itemLabel}.value_kind`),
31
+ required_methods: semanticStableRefs(row.required_methods, `${itemLabel}.required_methods`),
32
+ required_evidence_capabilities: semanticArray(row.required_evidence_capabilities, `${itemLabel}.required_evidence_capabilities`).map((entry, capabilityIndex) => semanticLiteral(entry, EVIDENCE_CAPABILITIES, `${itemLabel}.required_evidence_capabilities[${capabilityIndex}]`)),
33
+ applicable_unit_refs: semanticStableRefs(row.applicable_unit_refs, `${itemLabel}.applicable_unit_refs`),
34
+ not_applicable_unit_refs: semanticStableRefs(row.not_applicable_unit_refs, `${itemLabel}.not_applicable_unit_refs`),
35
+ decision_required_unit_refs: semanticStableRefs(row.decision_required_unit_refs, `${itemLabel}.decision_required_unit_refs`),
36
+ unavailable_unit_refs: semanticStableRefs(row.unavailable_unit_refs, `${itemLabel}.unavailable_unit_refs`),
37
+ condition_refs: semanticStableRefs(row.condition_refs, `${itemLabel}.condition_refs`),
38
+ source_item_refs: semanticStableRefs(row.source_item_refs, `${itemLabel}.source_item_refs`),
39
+ basis_refs: semanticStableRefs(row.basis_refs, `${itemLabel}.basis_refs`),
40
+ rationale: semanticString(row.rationale, `${itemLabel}.rationale`),
41
+ };
42
+ });
43
+ }
44
+ export function parseSemanticFactCells(value, label) {
45
+ return semanticArray(value, label).map((item, index) => {
46
+ const itemLabel = `${label}[${index}]`;
47
+ const row = semanticObject(item, itemLabel, [
48
+ "key",
49
+ "outcome_ref",
50
+ "unit_ref",
51
+ "condition_ref",
52
+ "property_ref",
53
+ "disposition",
54
+ "fact_ref",
55
+ "source_item_refs",
56
+ "basis_refs",
57
+ "rationale",
58
+ ]);
59
+ return {
60
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
61
+ outcome_ref: semanticStableRef(row.outcome_ref, `${itemLabel}.outcome_ref`),
62
+ unit_ref: semanticStableRef(row.unit_ref, `${itemLabel}.unit_ref`),
63
+ condition_ref: semanticStableRef(row.condition_ref, `${itemLabel}.condition_ref`),
64
+ property_ref: semanticStableRef(row.property_ref, `${itemLabel}.property_ref`),
65
+ disposition: semanticLiteral(row.disposition, [
66
+ "specified",
67
+ "not_applicable",
68
+ "decision_required",
69
+ "unavailable",
70
+ ], `${itemLabel}.disposition`),
71
+ fact_ref: semanticNullable(row.fact_ref, (entry) => semanticStableRef(entry, `${itemLabel}.fact_ref`)),
72
+ source_item_refs: semanticStableRefs(row.source_item_refs, `${itemLabel}.source_item_refs`),
73
+ basis_refs: semanticStableRefs(row.basis_refs, `${itemLabel}.basis_refs`),
74
+ rationale: semanticString(row.rationale, `${itemLabel}.rationale`),
75
+ };
76
+ });
77
+ }
@@ -0,0 +1,3 @@
1
+ export declare const SEMANTIC_FACT_DISPOSITIONS: readonly ["applicable", "not_applicable", "decision_required", "unavailable"];
2
+ export declare const SEMANTIC_FACT_VALUE_KINDS: readonly ["boolean", "number", "string", "enum", "set", "ordered_list", "object", "schema", "relation", "decision_table", "formula", "range", "duration", "timestamp", "rate", "ratio", "digest", "trace", "custom"];
3
+ export declare const SEMANTIC_FACT_LOCATOR_KINDS: readonly ["source_item", "manifest_pointer", "json_pointer", "yaml_pointer", "whole_resource", "schema_pointer", "api_operation", "code_symbol", "custom"];
@@ -0,0 +1,38 @@
1
+ export const SEMANTIC_FACT_DISPOSITIONS = [
2
+ "applicable",
3
+ "not_applicable",
4
+ "decision_required",
5
+ "unavailable",
6
+ ];
7
+ export const SEMANTIC_FACT_VALUE_KINDS = [
8
+ "boolean",
9
+ "number",
10
+ "string",
11
+ "enum",
12
+ "set",
13
+ "ordered_list",
14
+ "object",
15
+ "schema",
16
+ "relation",
17
+ "decision_table",
18
+ "formula",
19
+ "range",
20
+ "duration",
21
+ "timestamp",
22
+ "rate",
23
+ "ratio",
24
+ "digest",
25
+ "trace",
26
+ "custom",
27
+ ];
28
+ export const SEMANTIC_FACT_LOCATOR_KINDS = [
29
+ "source_item",
30
+ "manifest_pointer",
31
+ "json_pointer",
32
+ "yaml_pointer",
33
+ "whole_resource",
34
+ "schema_pointer",
35
+ "api_operation",
36
+ "code_symbol",
37
+ "custom",
38
+ ];
@@ -0,0 +1,15 @@
1
+ export type SemanticShape = Record<string, unknown>;
2
+ export declare function semanticObject(value: unknown, label: string, required: string[], optional?: string[]): SemanticShape;
3
+ export declare function semanticArray(value: unknown, label: string): unknown[];
4
+ export declare function semanticString(value: unknown, label: string): string;
5
+ export declare function semanticStrings(value: unknown, label: string): string[];
6
+ export declare function semanticStableRef(value: unknown, label: string): string;
7
+ export declare function semanticStableRefs(value: unknown, label: string): string[];
8
+ export declare function semanticSha256(value: unknown, label: string): string;
9
+ export declare function semanticNullableSha256(value: unknown, label: string): string | null;
10
+ export declare function semanticInteger(value: unknown, label: string, minimum?: number): number;
11
+ export declare function semanticFiniteNumber(value: unknown, label: string): number;
12
+ export declare function semanticNullableNumber(value: unknown, label: string): number | null;
13
+ export declare function semanticLiteral<T extends string>(value: unknown, allowed: readonly T[], label: string): T;
14
+ export declare function semanticNullable<T>(value: unknown, parser: (value: unknown) => T): T | null;
15
+ export declare function semanticFail(label: string, message: string): never;
@@ -0,0 +1,68 @@
1
+ export function semanticObject(value, label, required, optional = []) {
2
+ if (!value || typeof value !== "object" || Array.isArray(value))
3
+ semanticFail(label, "must be an object");
4
+ const row = value;
5
+ const allowed = new Set([...required, ...optional]);
6
+ const unknown = Object.keys(row).filter((key) => !allowed.has(key));
7
+ if (unknown.length)
8
+ semanticFail(label, `unknown keys: ${unknown.join(",")}`);
9
+ const missing = required.filter((key) => !Object.hasOwn(row, key));
10
+ if (missing.length)
11
+ semanticFail(label, `missing keys: ${missing.join(",")}`);
12
+ return row;
13
+ }
14
+ export function semanticArray(value, label) {
15
+ if (!Array.isArray(value))
16
+ semanticFail(label, "must be an array");
17
+ return value;
18
+ }
19
+ export function semanticString(value, label) {
20
+ if (typeof value !== "string" || !value.trim())
21
+ semanticFail(label, "must be a non-empty string");
22
+ return value;
23
+ }
24
+ export function semanticStrings(value, label) {
25
+ return semanticArray(value, label).map((item, index) => semanticString(item, `${label}[${index}]`));
26
+ }
27
+ export function semanticStableRef(value, label) {
28
+ const result = semanticString(value, label);
29
+ if (!/^[a-z0-9][a-z0-9._:-]*$/u.test(result))
30
+ semanticFail(label, "must be a stable lowercase reference");
31
+ return result;
32
+ }
33
+ export function semanticStableRefs(value, label) {
34
+ return semanticArray(value, label).map((item, index) => semanticStableRef(item, `${label}[${index}]`));
35
+ }
36
+ export function semanticSha256(value, label) {
37
+ const result = semanticString(value, label);
38
+ if (!/^[a-f0-9]{64}$/u.test(result))
39
+ semanticFail(label, "must be a lowercase SHA-256 digest");
40
+ return result;
41
+ }
42
+ export function semanticNullableSha256(value, label) {
43
+ return value === null ? null : semanticSha256(value, label);
44
+ }
45
+ export function semanticInteger(value, label, minimum = 0) {
46
+ if (!Number.isInteger(value) || Number(value) < minimum)
47
+ semanticFail(label, `must be an integer >= ${minimum}`);
48
+ return Number(value);
49
+ }
50
+ export function semanticFiniteNumber(value, label) {
51
+ if (typeof value !== "number" || !Number.isFinite(value))
52
+ semanticFail(label, "must be a finite number");
53
+ return value;
54
+ }
55
+ export function semanticNullableNumber(value, label) {
56
+ return value === null ? null : semanticFiniteNumber(value, label);
57
+ }
58
+ export function semanticLiteral(value, allowed, label) {
59
+ if (typeof value !== "string" || !allowed.includes(value))
60
+ semanticFail(label, `must be one of ${allowed.join(",")}`);
61
+ return value;
62
+ }
63
+ export function semanticNullable(value, parser) {
64
+ return value === null ? null : parser(value);
65
+ }
66
+ export function semanticFail(label, message) {
67
+ throw new Error(`semantic_fact_manifest_invalid:${label}:${message}`);
68
+ }
@@ -0,0 +1,9 @@
1
+ import type { SemanticFactManifestV1 } from "./semantic-fact-types.js";
2
+ export interface ParsedSemanticFactManifestV1 {
3
+ source_path: string;
4
+ line: number;
5
+ manifest: SemanticFactManifestV1;
6
+ sha256: string;
7
+ }
8
+ export declare function parseSemanticFactManifestBlocks(sourcePath: string, content: string): ParsedSemanticFactManifestV1[];
9
+ export declare function loadSemanticFactManifest(repository: string, sourcePaths: string[]): Promise<ParsedSemanticFactManifestV1>;
@@ -0,0 +1,46 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { assertProtectedRepositoryFile } from "./long-task-protected-files.js";
4
+ import { parseSemanticFactManifestShape } from "./semantic-fact-manifest-shape.js";
5
+ import { canonicalValueJson, parseStrictYaml, sha256Hex, } from "./strict-codec.js";
6
+ const START = /^\s*```yaml[ \t]+semantic-fact-manifest-v1[ \t]*$/u;
7
+ const END = /^\s*```[ \t]*$/u;
8
+ export function parseSemanticFactManifestBlocks(sourcePath, content) {
9
+ const rows = [];
10
+ const lines = content.replace(/\r\n?/gu, "\n").split("\n");
11
+ let open = null;
12
+ for (const [index, line] of lines.entries()) {
13
+ if (!open) {
14
+ if (START.test(line))
15
+ open = { line: index + 1, lines: [] };
16
+ continue;
17
+ }
18
+ if (!END.test(line)) {
19
+ open.lines.push(line);
20
+ continue;
21
+ }
22
+ const manifest = parseSemanticFactManifestShape(parseStrictYaml(open.lines.join("\n")));
23
+ rows.push({
24
+ source_path: sourcePath,
25
+ line: open.line,
26
+ manifest,
27
+ sha256: sha256Hex(canonicalValueJson(manifest)),
28
+ });
29
+ open = null;
30
+ }
31
+ if (open)
32
+ throw new Error(`source_formal_block_unclosed:${sourcePath}:semantic-fact-manifest-v1:${open.line}`);
33
+ return rows;
34
+ }
35
+ export async function loadSemanticFactManifest(repository, sourcePaths) {
36
+ const rows = [];
37
+ for (const [index, sourcePath] of sourcePaths.entries()) {
38
+ if (!sourcePath.toLowerCase().endsWith(".md"))
39
+ continue;
40
+ const file = await assertProtectedRepositoryFile(repository, path.resolve(repository, ...sourcePath.split("/")), `semantic_fact_manifest_source:${index}:${sourcePath}`);
41
+ rows.push(...parseSemanticFactManifestBlocks(sourcePath, await readFile(file, "utf8")));
42
+ }
43
+ if (rows.length !== 1)
44
+ throw new Error(`semantic_fact_manifest_exactly_one_required:${rows.length}`);
45
+ return rows[0];
46
+ }
@@ -0,0 +1,21 @@
1
+ export declare function parseSemanticFactOracles(value: unknown, label: string): {
2
+ key: string;
3
+ trust: "frozen_executable" | "named_external_tcb";
4
+ identity: string;
5
+ version: string;
6
+ sha256: string | null;
7
+ capabilities: string[];
8
+ }[];
9
+ export declare function parseSemanticFactEnvironments(value: unknown, label: string): {
10
+ key: string;
11
+ identity: string;
12
+ definition: import("./semantic-fact-base-types.js").SemanticFactLocatedValueV1;
13
+ }[];
14
+ export declare function parseSemanticFactBlockers(value: unknown, label: string): {
15
+ key: string;
16
+ kind: "conflict" | "decision_required" | "unavailable" | "unreadable";
17
+ affected_refs: string[];
18
+ source_item_refs: string[];
19
+ owner: string;
20
+ resolution: string;
21
+ }[];
@@ -0,0 +1,59 @@
1
+ import { semanticArray, semanticLiteral, semanticNullableSha256, semanticObject, semanticStableRef, semanticStableRefs, semanticString, } from "./semantic-fact-shape-primitives.js";
2
+ import { parseSemanticFactLocatedValue } from "./semantic-fact-value-shape.js";
3
+ export function parseSemanticFactOracles(value, label) {
4
+ return semanticArray(value, label).map((item, index) => {
5
+ const itemLabel = `${label}[${index}]`;
6
+ const row = semanticObject(item, itemLabel, [
7
+ "key",
8
+ "trust",
9
+ "identity",
10
+ "version",
11
+ "sha256",
12
+ "capabilities",
13
+ ]);
14
+ return {
15
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
16
+ trust: semanticLiteral(row.trust, ["frozen_executable", "named_external_tcb"], `${itemLabel}.trust`),
17
+ identity: semanticString(row.identity, `${itemLabel}.identity`),
18
+ version: semanticString(row.version, `${itemLabel}.version`),
19
+ sha256: semanticNullableSha256(row.sha256, `${itemLabel}.sha256`),
20
+ capabilities: semanticStableRefs(row.capabilities, `${itemLabel}.capabilities`),
21
+ };
22
+ });
23
+ }
24
+ export function parseSemanticFactEnvironments(value, label) {
25
+ return semanticArray(value, label).map((item, index) => {
26
+ const itemLabel = `${label}[${index}]`;
27
+ const row = semanticObject(item, itemLabel, [
28
+ "key",
29
+ "identity",
30
+ "definition",
31
+ ]);
32
+ return {
33
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
34
+ identity: semanticString(row.identity, `${itemLabel}.identity`),
35
+ definition: parseSemanticFactLocatedValue(row.definition, `${itemLabel}.definition`),
36
+ };
37
+ });
38
+ }
39
+ export function parseSemanticFactBlockers(value, label) {
40
+ return semanticArray(value, label).map((item, index) => {
41
+ const itemLabel = `${label}[${index}]`;
42
+ const row = semanticObject(item, itemLabel, [
43
+ "key",
44
+ "kind",
45
+ "affected_refs",
46
+ "source_item_refs",
47
+ "owner",
48
+ "resolution",
49
+ ]);
50
+ return {
51
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
52
+ kind: semanticLiteral(row.kind, ["decision_required", "unavailable", "conflict", "unreadable"], `${itemLabel}.kind`),
53
+ affected_refs: semanticStableRefs(row.affected_refs, `${itemLabel}.affected_refs`),
54
+ source_item_refs: semanticStableRefs(row.source_item_refs, `${itemLabel}.source_item_refs`),
55
+ owner: semanticString(row.owner, `${itemLabel}.owner`),
56
+ resolution: semanticString(row.resolution, `${itemLabel}.resolution`),
57
+ };
58
+ });
59
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./long-task-semantic-fact-binding-types.js";
2
+ export * from "./semantic-fact-base-types.js";
3
+ export * from "./semantic-fact-inventory-types.js";
4
+ export * from "./semantic-fact-manifest-types.js";
5
+ export * from "./semantic-fact-proof-types.js";
@@ -0,0 +1,5 @@
1
+ export * from "./long-task-semantic-fact-binding-types.js";
2
+ export * from "./semantic-fact-base-types.js";
3
+ export * from "./semantic-fact-inventory-types.js";
4
+ export * from "./semantic-fact-manifest-types.js";
5
+ export * from "./semantic-fact-proof-types.js";
@@ -0,0 +1,34 @@
1
+ export declare function parseSemanticFactSubjects(value: unknown, label: string): {
2
+ key: string;
3
+ family_ref: string;
4
+ outcome_ref: string;
5
+ kind: string;
6
+ parent_ref: string | null;
7
+ owner_ref: string | null;
8
+ source_item_refs: string[];
9
+ basis_refs: string[];
10
+ }[];
11
+ export declare function parseSemanticFactRelations(value: unknown, label: string): {
12
+ key: string;
13
+ family_ref: string;
14
+ outcome_ref: string;
15
+ kind: string;
16
+ endpoints: {
17
+ role: string;
18
+ unit_ref: string;
19
+ }[];
20
+ source_item_refs: string[];
21
+ basis_refs: string[];
22
+ }[];
23
+ export declare function parseSemanticFactPopulations(value: unknown, label: string): {
24
+ key: string;
25
+ family_ref: string;
26
+ outcome_ref: string;
27
+ kind: "dynamic" | "static";
28
+ member_unit_refs: string[];
29
+ universe: import("./semantic-fact-base-types.js").SemanticFactLocatedValueV1;
30
+ enumeration_rule: string;
31
+ exclusion_refs: string[];
32
+ source_item_refs: string[];
33
+ basis_refs: string[];
34
+ }[];
@@ -0,0 +1,89 @@
1
+ import { semanticArray, semanticLiteral, semanticNullable, semanticObject, semanticStableRef, semanticStableRefs, semanticString, } from "./semantic-fact-shape-primitives.js";
2
+ import { parseSemanticFactLocatedValue } from "./semantic-fact-value-shape.js";
3
+ export function parseSemanticFactSubjects(value, label) {
4
+ return semanticArray(value, label).map((item, index) => {
5
+ const itemLabel = `${label}[${index}]`;
6
+ const row = semanticObject(item, itemLabel, [
7
+ "key",
8
+ "family_ref",
9
+ "outcome_ref",
10
+ "kind",
11
+ "parent_ref",
12
+ "owner_ref",
13
+ "source_item_refs",
14
+ "basis_refs",
15
+ ]);
16
+ return {
17
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
18
+ family_ref: semanticStableRef(row.family_ref, `${itemLabel}.family_ref`),
19
+ outcome_ref: semanticStableRef(row.outcome_ref, `${itemLabel}.outcome_ref`),
20
+ kind: semanticStableRef(row.kind, `${itemLabel}.kind`),
21
+ parent_ref: semanticNullable(row.parent_ref, (entry) => semanticStableRef(entry, `${itemLabel}.parent_ref`)),
22
+ owner_ref: semanticNullable(row.owner_ref, (entry) => semanticStableRef(entry, `${itemLabel}.owner_ref`)),
23
+ source_item_refs: semanticStableRefs(row.source_item_refs, `${itemLabel}.source_item_refs`),
24
+ basis_refs: semanticStableRefs(row.basis_refs, `${itemLabel}.basis_refs`),
25
+ };
26
+ });
27
+ }
28
+ export function parseSemanticFactRelations(value, label) {
29
+ return semanticArray(value, label).map((item, index) => {
30
+ const itemLabel = `${label}[${index}]`;
31
+ const row = semanticObject(item, itemLabel, [
32
+ "key",
33
+ "family_ref",
34
+ "outcome_ref",
35
+ "kind",
36
+ "endpoints",
37
+ "source_item_refs",
38
+ "basis_refs",
39
+ ]);
40
+ return {
41
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
42
+ family_ref: semanticStableRef(row.family_ref, `${itemLabel}.family_ref`),
43
+ outcome_ref: semanticStableRef(row.outcome_ref, `${itemLabel}.outcome_ref`),
44
+ kind: semanticStableRef(row.kind, `${itemLabel}.kind`),
45
+ endpoints: semanticArray(row.endpoints, `${itemLabel}.endpoints`).map((endpoint, endpointIndex) => {
46
+ const endpointLabel = `${itemLabel}.endpoints[${endpointIndex}]`;
47
+ const entry = semanticObject(endpoint, endpointLabel, [
48
+ "role",
49
+ "unit_ref",
50
+ ]);
51
+ return {
52
+ role: semanticStableRef(entry.role, `${endpointLabel}.role`),
53
+ unit_ref: semanticStableRef(entry.unit_ref, `${endpointLabel}.unit_ref`),
54
+ };
55
+ }),
56
+ source_item_refs: semanticStableRefs(row.source_item_refs, `${itemLabel}.source_item_refs`),
57
+ basis_refs: semanticStableRefs(row.basis_refs, `${itemLabel}.basis_refs`),
58
+ };
59
+ });
60
+ }
61
+ export function parseSemanticFactPopulations(value, label) {
62
+ return semanticArray(value, label).map((item, index) => {
63
+ const itemLabel = `${label}[${index}]`;
64
+ const row = semanticObject(item, itemLabel, [
65
+ "key",
66
+ "family_ref",
67
+ "outcome_ref",
68
+ "kind",
69
+ "member_unit_refs",
70
+ "universe",
71
+ "enumeration_rule",
72
+ "exclusion_refs",
73
+ "source_item_refs",
74
+ "basis_refs",
75
+ ]);
76
+ return {
77
+ key: semanticStableRef(row.key, `${itemLabel}.key`),
78
+ family_ref: semanticStableRef(row.family_ref, `${itemLabel}.family_ref`),
79
+ outcome_ref: semanticStableRef(row.outcome_ref, `${itemLabel}.outcome_ref`),
80
+ kind: semanticLiteral(row.kind, ["static", "dynamic"], `${itemLabel}.kind`),
81
+ member_unit_refs: semanticStableRefs(row.member_unit_refs, `${itemLabel}.member_unit_refs`),
82
+ universe: parseSemanticFactLocatedValue(row.universe, `${itemLabel}.universe`),
83
+ enumeration_rule: semanticString(row.enumeration_rule, `${itemLabel}.enumeration_rule`),
84
+ exclusion_refs: semanticStableRefs(row.exclusion_refs, `${itemLabel}.exclusion_refs`),
85
+ source_item_refs: semanticStableRefs(row.source_item_refs, `${itemLabel}.source_item_refs`),
86
+ basis_refs: semanticStableRefs(row.basis_refs, `${itemLabel}.basis_refs`),
87
+ };
88
+ });
89
+ }
@@ -0,0 +1,12 @@
1
+ import type { SemanticFactLocatedValueV1 } from "./semantic-fact-types.js";
2
+ export declare function parseSemanticFactAxisValues(value: unknown, label: string): {
3
+ axis_ref: string;
4
+ value_ref: string;
5
+ }[];
6
+ export declare function parseSemanticFactLocatedValue(value: unknown, label: string): SemanticFactLocatedValueV1;
7
+ export declare function parseSemanticFactLocator(value: unknown, label: string): {
8
+ material_ref: string;
9
+ kind: "api_operation" | "code_symbol" | "custom" | "json_pointer" | "manifest_pointer" | "schema_pointer" | "source_item" | "whole_resource" | "yaml_pointer";
10
+ value: string;
11
+ };
12
+ export declare function parseSemanticFactBoolean(value: unknown, label: string): boolean;
@@ -0,0 +1,39 @@
1
+ import { SEMANTIC_FACT_LOCATOR_KINDS } from "./semantic-fact-shape-constants.js";
2
+ import { semanticArray, semanticLiteral, semanticObject, semanticSha256, semanticStableRef, semanticString, } from "./semantic-fact-shape-primitives.js";
3
+ export function parseSemanticFactAxisValues(value, label) {
4
+ return semanticArray(value, label).map((item, index) => {
5
+ const itemLabel = `${label}[${index}]`;
6
+ const row = semanticObject(item, itemLabel, ["axis_ref", "value_ref"]);
7
+ return {
8
+ axis_ref: semanticStableRef(row.axis_ref, `${itemLabel}.axis_ref`),
9
+ value_ref: semanticStableRef(row.value_ref, `${itemLabel}.value_ref`),
10
+ };
11
+ });
12
+ }
13
+ export function parseSemanticFactLocatedValue(value, label) {
14
+ const preliminary = semanticObject(value, label, ["representation", "locator", "sha256"], ["value"]);
15
+ const representation = semanticLiteral(preliminary.representation, ["inline", "located", "digest_only"], `${label}.representation`);
16
+ if (representation === "inline" && !Object.hasOwn(preliminary, "value"))
17
+ throw new Error(`semantic_fact_manifest_invalid:${label}.value:required for inline representation`);
18
+ if (representation !== "inline" && Object.hasOwn(preliminary, "value"))
19
+ throw new Error(`semantic_fact_manifest_invalid:${label}.value:forbidden for ${representation} representation`);
20
+ return {
21
+ representation,
22
+ locator: parseSemanticFactLocator(preliminary.locator, `${label}.locator`),
23
+ sha256: semanticSha256(preliminary.sha256, `${label}.sha256`),
24
+ ...(representation === "inline" ? { value: preliminary.value } : {}),
25
+ };
26
+ }
27
+ export function parseSemanticFactLocator(value, label) {
28
+ const row = semanticObject(value, label, ["material_ref", "kind", "value"]);
29
+ return {
30
+ material_ref: semanticStableRef(row.material_ref, `${label}.material_ref`),
31
+ kind: semanticLiteral(row.kind, SEMANTIC_FACT_LOCATOR_KINDS, `${label}.kind`),
32
+ value: semanticString(row.value, `${label}.value`),
33
+ };
34
+ }
35
+ export function parseSemanticFactBoolean(value, label) {
36
+ if (typeof value !== "boolean")
37
+ throw new Error(`semantic_fact_manifest_invalid:${label}:must be boolean`);
38
+ return value;
39
+ }