stylegallery 0.1.0 → 0.1.2

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 (230) hide show
  1. package/AGENTS.md +4 -1
  2. package/DOMAINS.md +2 -6
  3. package/GOVERNANCE.md +10 -9
  4. package/README.md +29 -127
  5. package/consumer-reference/agent-native/v2/admission-policy.json +646 -0
  6. package/consumer-reference/agent-native/v2/material-registry.json +1 -0
  7. package/consumer-reference/agent-native/v2/schema/admission-policy.schema.json +50 -0
  8. package/consumer-reference/agent-native/v2/schema/material-manifest.schema.json +17 -0
  9. package/consumer-reference/agent-native/v2/schema/material-record.schema.json +20 -0
  10. package/consumer-reference/contract.md +1 -1
  11. package/consumer-reference/index.md +5 -3
  12. package/layout/index.md +124 -0
  13. package/log.md +57 -0
  14. package/package.json +183 -22
  15. package/scripts/agent-native/v2/experimental-extension-registry.mjs +143 -0
  16. package/scripts/agent-native/v2/extensions/a2a-projection.mjs +264 -0
  17. package/scripts/agent-native/v2/extensions/agui-projection.mjs +191 -0
  18. package/scripts/agent-native/v2/material-admission.mjs +295 -0
  19. package/scripts/agent-native/v2/material-cli-adapter.mjs +134 -0
  20. package/scripts/agent-native/v2/material-context.mjs +251 -0
  21. package/scripts/agent-native/v2/material-identity.mjs +71 -0
  22. package/scripts/agent-native/v2/material-mcp-adapter.mjs +253 -0
  23. package/scripts/agent-native/v2/material-operation-registry.mjs +123 -0
  24. package/scripts/agent-native/v2/material-queries.mjs +398 -0
  25. package/scripts/agent-native/v2/material-registry.mjs +319 -0
  26. package/scripts/sg-material-mcp.mjs +98 -0
  27. package/scripts/sg-material.mjs +27 -0
  28. package/consumer-reference/adapters/style-dictionary.config.mjs +0 -36
  29. package/consumer-reference/baselines/calibration.json +0 -260
  30. package/consumer-reference/baselines/manifest.json +0 -21
  31. package/consumer-reference/fixtures/consumer-conformance/e2e-fixture.mjs +0 -282
  32. package/consumer-reference/fixtures/consumer-conformance/manifest.json +0 -102
  33. package/consumer-reference/fixtures/consumer-conformance/runtime-proof.mjs +0 -32
  34. package/consumer-reference/fixtures/consumer-conformance/valid-migration-result.json +0 -18
  35. package/consumer-reference/fixtures/consumer-conformance/valid-migration.json +0 -142
  36. package/consumer-reference/fixtures/invalid-stable-ended-support.json +0 -19
  37. package/consumer-reference/fixtures/promotion/invalid-blocking-evidence.json +0 -26
  38. package/consumer-reference/fixtures/promotion/invalid-count-only.json +0 -29
  39. package/consumer-reference/fixtures/promotion/invalid-missing-owner-migration.json +0 -25
  40. package/consumer-reference/fixtures/promotion/invalid-normative-bypass-no-regression.json +0 -25
  41. package/consumer-reference/fixtures/promotion/invalid-related-counted-independent.json +0 -45
  42. package/consumer-reference/fixtures/promotion/invalid-stable-ended-support.json +0 -26
  43. package/consumer-reference/fixtures/promotion/manifest.json +0 -15
  44. package/consumer-reference/fixtures/promotion/valid-deferred-example.json +0 -67
  45. package/consumer-reference/fixtures/promotion/valid-normative-bypass.json +0 -67
  46. package/consumer-reference/fixtures/token-portability/invalid-cycle.json +0 -7
  47. package/consumer-reference/fixtures/token-portability/invalid-dangling-alias.json +0 -6
  48. package/consumer-reference/fixtures/token-portability/invalid-extends.json +0 -4
  49. package/consumer-reference/fixtures/token-portability/invalid-json-pointer.json +0 -7
  50. package/consumer-reference/fixtures/token-portability/invalid-resolver.json +0 -9
  51. package/consumer-reference/fixtures/token-portability/invalid-type-mismatch.json +0 -10
  52. package/consumer-reference/fixtures/token-portability/invalid-unknown-reserved.json +0 -6
  53. package/consumer-reference/fixtures/token-portability/invalid-untested-type.json +0 -6
  54. package/consumer-reference/fixtures/token-portability/valid-border.json +0 -14
  55. package/consumer-reference/fixtures/token-portability/valid-reference.json +0 -32
  56. package/consumer-reference/fixtures/token-portability/valid-whole-alias.json +0 -7
  57. package/consumer-reference/fixtures/valid-deprecated.json +0 -21
  58. package/consumer-reference/fixtures/valid-experimental.json +0 -19
  59. package/consumer-reference/generated/manifest.json +0 -40
  60. package/consumer-reference/generated/tokens.css +0 -12
  61. package/consumer-reference/policies/shared-experimental.json +0 -37
  62. package/consumer-reference/schema/ax-evidence.schema.json +0 -30
  63. package/consumer-reference/schema/baseline-manifest.schema.json +0 -55
  64. package/consumer-reference/schema/calibration-record.schema.json +0 -190
  65. package/consumer-reference/schema/capture-session.schema.json +0 -161
  66. package/consumer-reference/schema/component-state.schema.json +0 -150
  67. package/consumer-reference/schema/consumer-conformance-record.schema.json +0 -365
  68. package/consumer-reference/schema/dom-evidence.schema.json +0 -38
  69. package/consumer-reference/schema/evidence-record.schema.json +0 -81
  70. package/consumer-reference/schema/fixture-manifest.schema.json +0 -32
  71. package/consumer-reference/schema/item.schema.json +0 -188
  72. package/consumer-reference/schema/page-evidence-manifest.schema.json +0 -216
  73. package/consumer-reference/schema/page-evidence-session.schema.json +0 -119
  74. package/consumer-reference/schema/portable-tokens.schema.json +0 -104
  75. package/consumer-reference/schema/promotion-rfc.schema.json +0 -219
  76. package/consumer-reference/schema/runtime-evidence-manifest.schema.json +0 -33
  77. package/consumer-reference/schema/visual-evidence.schema.json +0 -31
  78. package/design-engineering/consumer-migration-readiness.md +0 -124
  79. package/design-engineering/interface-craft.md +0 -107
  80. package/design-engineering/reference-profiles/external-adaptation/index.md +0 -12
  81. package/design-engineering/reference-profiles/governed-local/editorial/components/button.component.json +0 -125
  82. package/design-engineering/reference-profiles/governed-local/editorial/evidence/button.evidence.json +0 -3504
  83. package/design-engineering/reference-profiles/governed-local/editorial/fixtures/button.fixture.json +0 -65
  84. package/design-engineering/reference-profiles/governed-local/editorial/generated/evidence-coverage.md +0 -23
  85. package/design-engineering/reference-profiles/governed-local/editorial/generated/keyboard-matrix.md +0 -19
  86. package/design-engineering/reference-profiles/governed-local/editorial/generated/state-matrix.md +0 -21
  87. package/design-engineering/reference-profiles/governed-local/editorial/local-foundations.json +0 -12
  88. package/design-engineering/reference-profiles/governed-local/editorial/states/button.states.json +0 -195
  89. package/design-engineering/reference-profiles/governed-local/editorial/tokens.dtcg.json +0 -17
  90. package/design-engineering/reference-profiles/governed-local/terminal/components/button.component.json +0 -125
  91. package/design-engineering/reference-profiles/governed-local/terminal/evidence/button.evidence.json +0 -3504
  92. package/design-engineering/reference-profiles/governed-local/terminal/fixtures/button.fixture.json +0 -65
  93. package/design-engineering/reference-profiles/governed-local/terminal/generated/evidence-coverage.md +0 -23
  94. package/design-engineering/reference-profiles/governed-local/terminal/generated/keyboard-matrix.md +0 -19
  95. package/design-engineering/reference-profiles/governed-local/terminal/generated/state-matrix.md +0 -21
  96. package/design-engineering/reference-profiles/governed-local/terminal/local-foundations.json +0 -12
  97. package/design-engineering/reference-profiles/governed-local/terminal/profile.json +0 -43
  98. package/design-engineering/reference-profiles/governed-local/terminal/states/button.states.json +0 -195
  99. package/design-engineering/reference-profiles/governed-local/terminal/tokens.dtcg.json +0 -17
  100. package/game-ui/classification.md +0 -82
  101. package/game-ui/reference-record.md +0 -62
  102. package/game-ui/screen-hierarchy.md +0 -107
  103. package/game-ui/unity/architecture.md +0 -166
  104. package/game-ui/unity/cli-loop.md +0 -84
  105. package/game-ui/unity/data/unity-technologies-public-repositories.json +0 -26654
  106. package/game-ui/unity/org-wiki.md +0 -146
  107. package/game-ui/unity/repository-map.md +0 -102
  108. package/game-ui/unity/ui-systems.md +0 -85
  109. package/motion/practice-reference.md +0 -145
  110. package/motion/review-workflow.md +0 -86
  111. package/motion/vocabulary.md +0 -82
  112. package/platform-guides/apple-interaction.md +0 -89
  113. package/scripts/agent-native/events.mjs +0 -113
  114. package/scripts/agent-native/immutable-store.mjs +0 -102
  115. package/scripts/artifact-metadata.mjs +0 -20
  116. package/scripts/audit-evidence-freshness.mjs +0 -308
  117. package/scripts/baseline-contract.mjs +0 -189
  118. package/scripts/baseline-schema-parity.mjs +0 -40
  119. package/scripts/build-reference-artifacts.mjs +0 -127
  120. package/scripts/calibration-raw-contract.mjs +0 -172
  121. package/scripts/capture-session-contract.mjs +0 -187
  122. package/scripts/component-state-artifact-fixture.mjs +0 -44
  123. package/scripts/component-state-contract.mjs +0 -99
  124. package/scripts/component-state-semantics.mjs +0 -128
  125. package/scripts/component-state-workflow-contract.mjs +0 -67
  126. package/scripts/component-state-workflow-negative-cases.mjs +0 -64
  127. package/scripts/consumer-conformance-contract.mjs +0 -198
  128. package/scripts/consumer-evidence-governance-contract.mjs +0 -210
  129. package/scripts/consumer-reference-case-runner.mjs +0 -93
  130. package/scripts/consumer-reference-schema.mjs +0 -155
  131. package/scripts/create-component-state-session.mjs +0 -100
  132. package/scripts/create-page-evidence-session.mjs +0 -139
  133. package/scripts/domain-document-boundaries.mjs +0 -40
  134. package/scripts/domain-validation-checks.mjs +0 -141
  135. package/scripts/evidence-artifact-contract.mjs +0 -191
  136. package/scripts/finalize-component-state-evidence.mjs +0 -165
  137. package/scripts/finalize-page-evidence.mjs +0 -197
  138. package/scripts/generate-consumer-reference-evidence.mjs +0 -154
  139. package/scripts/generate-patterns.mjs +0 -218
  140. package/scripts/governance-matrix-contract.mjs +0 -73
  141. package/scripts/governance-matrix-negative-cases.mjs +0 -114
  142. package/scripts/governance-policy-contract.mjs +0 -49
  143. package/scripts/governance-test-fixture.mjs +0 -321
  144. package/scripts/governance-workflow-negative-cases.mjs +0 -241
  145. package/scripts/governed-profile-registry.mjs +0 -125
  146. package/scripts/json-schema-formats.mjs +0 -31
  147. package/scripts/markdown-structure.mjs +0 -45
  148. package/scripts/page-artifact-metadata.mjs +0 -124
  149. package/scripts/page-evidence-contract.mjs +0 -297
  150. package/scripts/page-evidence-fixture.mjs +0 -271
  151. package/scripts/pattern-data.mjs +0 -325
  152. package/scripts/profile-record-contract.mjs +0 -140
  153. package/scripts/promotion-attestation-contract.mjs +0 -91
  154. package/scripts/promotion-boundary-test-contract.mjs +0 -92
  155. package/scripts/promotion-fixture-inventory.mjs +0 -109
  156. package/scripts/promotion-governance-contract.mjs +0 -28
  157. package/scripts/reference-artifact-path-contract.mjs +0 -28
  158. package/scripts/reference-profile-contract.mjs +0 -114
  159. package/scripts/reference-token-contract.mjs +0 -156
  160. package/scripts/run-consumer-page-evidence-ci.mjs +0 -170
  161. package/scripts/summarize-sentinel-calibration.mjs +0 -98
  162. package/scripts/test-agent-adapter-conformance.mjs +0 -250
  163. package/scripts/test-agent-conformance-receipt.mjs +0 -106
  164. package/scripts/test-agent-events.mjs +0 -81
  165. package/scripts/test-agent-execution-effects.mjs +0 -114
  166. package/scripts/test-agent-execution-fixtures.mjs +0 -140
  167. package/scripts/test-agent-execution-kernel.mjs +0 -39
  168. package/scripts/test-agent-execution-learning.mjs +0 -130
  169. package/scripts/test-agent-execution-lifecycle.mjs +0 -143
  170. package/scripts/test-agent-execution-safety.mjs +0 -158
  171. package/scripts/test-agent-execution-views.mjs +0 -117
  172. package/scripts/test-agent-identity-integrity-cases.mjs +0 -160
  173. package/scripts/test-agent-knowledge-kernel.mjs +0 -183
  174. package/scripts/test-agent-learning.mjs +0 -246
  175. package/scripts/test-agent-mcp.mjs +0 -246
  176. package/scripts/test-agent-native-schemas.mjs +0 -215
  177. package/scripts/test-agent-projections.mjs +0 -249
  178. package/scripts/test-agent-registry-mcp-integrity.mjs +0 -215
  179. package/scripts/test-agent-registry-mutations.mjs +0 -110
  180. package/scripts/test-audit-evidence-freshness.mjs +0 -177
  181. package/scripts/test-component-state-sentinel.mjs +0 -35
  182. package/scripts/test-component-state-source-contract.mjs +0 -83
  183. package/scripts/test-consumer-conformance-sentinel.mjs +0 -165
  184. package/scripts/test-consumer-reference-sentinel.mjs +0 -31
  185. package/scripts/test-generate-consumer-reference-evidence.mjs +0 -124
  186. package/scripts/test-json-cli-output.mjs +0 -151
  187. package/scripts/test-json-schema-formats.mjs +0 -40
  188. package/scripts/test-reference-adapters.mjs +0 -199
  189. package/scripts/test-renderer-purity.mjs +0 -34
  190. package/scripts/test-sg-cli.mjs +0 -129
  191. package/scripts/test-summarize-sentinel-calibration.mjs +0 -226
  192. package/scripts/test-validate-baseline-manifest.mjs +0 -234
  193. package/scripts/test-validate-component-state-artifacts.mjs +0 -243
  194. package/scripts/test-validate-component-state.mjs +0 -106
  195. package/scripts/test-validate-consumer-conformance.mjs +0 -427
  196. package/scripts/test-validate-consumer-reference-cli.mjs +0 -69
  197. package/scripts/test-validate-consumer-reference.mjs +0 -263
  198. package/scripts/test-validate-domains.mjs +0 -357
  199. package/scripts/test-validate-governance.mjs +0 -292
  200. package/scripts/test-validate-ia.mjs +0 -262
  201. package/scripts/test-validate-okf.mjs +0 -73
  202. package/scripts/test-validate-page-evidence.mjs +0 -302
  203. package/scripts/test-validate-patterns.mjs +0 -157
  204. package/scripts/test-validate-promotion-rfc.mjs +0 -250
  205. package/scripts/test-validate-reference-profiles.mjs +0 -170
  206. package/scripts/test-validate-unity-org-wiki.mjs +0 -57
  207. package/scripts/test-validate-unity-source-contracts.mjs +0 -67
  208. package/scripts/test-validate-vocabulary.mjs +0 -174
  209. package/scripts/test-validate-webpage-workflow.mjs +0 -293
  210. package/scripts/validate-baseline-manifest.mjs +0 -44
  211. package/scripts/validate-catalog.mjs +0 -65
  212. package/scripts/validate-component-state.mjs +0 -141
  213. package/scripts/validate-consumer-conformance.mjs +0 -477
  214. package/scripts/validate-consumer-reference.mjs +0 -288
  215. package/scripts/validate-domains.mjs +0 -237
  216. package/scripts/validate-governance.mjs +0 -248
  217. package/scripts/validate-ia.mjs +0 -136
  218. package/scripts/validate-links.mjs +0 -66
  219. package/scripts/validate-okf.mjs +0 -104
  220. package/scripts/validate-page-evidence.mjs +0 -191
  221. package/scripts/validate-patterns.mjs +0 -246
  222. package/scripts/validate-promotion-rfc.mjs +0 -224
  223. package/scripts/validate-reference-artifacts.mjs +0 -125
  224. package/scripts/validate-renderer-purity.mjs +0 -56
  225. package/scripts/validate-unity-org-wiki.mjs +0 -146
  226. package/scripts/validate-unity-source-contracts.mjs +0 -107
  227. package/scripts/validate-vocabulary.mjs +0 -115
  228. package/scripts/validate-webpage-workflow.mjs +0 -254
  229. package/scripts/visual-expectation-contract.mjs +0 -20
  230. package/scripts/workflow-action-contract.mjs +0 -163
@@ -1,260 +0,0 @@
1
- {
2
- "baseline_owner_approval": "pending",
3
- "committed_ci": {
4
- "artifact_name": "chromium-sentinel-calibration-29260372260-18229be570766d3b42f5600955120bfcba690b76",
5
- "checkout_sha": "18229be570766d3b42f5600955120bfcba690b76",
6
- "execution_repository": "ark-jo/StyleGallery",
7
- "head_sha": "3bfdd25ec9a2df4ca84e19541365d48842a73f59",
8
- "raw_evidence_sha256": "1f125d5b321063b364e19283897c78c126d73eb1b3368d14686c494b1296dfab",
9
- "repository": "changeroa/StyleGallery",
10
- "run_attempt": "1",
11
- "run_id": "29260372260",
12
- "sha": "18229be570766d3b42f5600955120bfcba690b76",
13
- "workflow": ".github/workflows/validate.yml",
14
- "external_verification": {
15
- "artifact": {
16
- "api_digest": "sha256:3f11a517b447e1b5a1da17d9ee66ba2dd947fc8a0a482c447556ef00652e6074",
17
- "expires_at": "2026-07-27T15:01:36Z",
18
- "id": "8283099324",
19
- "name": "chromium-sentinel-calibration-29260372260-18229be570766d3b42f5600955120bfcba690b76",
20
- "size_in_bytes": 70310
21
- },
22
- "repository_relationship": {
23
- "execution_is_fork": true,
24
- "parent": "changeroa/StyleGallery",
25
- "source": "changeroa/StyleGallery"
26
- },
27
- "source": "https://github.com/ark-jo/StyleGallery/actions/runs/29260372260",
28
- "verified_at": "2026-07-13T15:04:41Z"
29
- }
30
- },
31
- "environment": {
32
- "architecture": "amd64",
33
- "browser_revision": "1228",
34
- "browser_version": "149.0.7827.55",
35
- "container_image": "mcr.microsoft.com/playwright:v1.61.0-noble@sha256:57b65fdc9ceabe0ef613124c7bbe2babcf9362c4d85e382fe3b03604e84b428a",
36
- "node": "22",
37
- "os": "Ubuntu 24.04",
38
- "platform": "linux/amd64",
39
- "playwright": "1.61.0",
40
- "viewport": {
41
- "height": 768,
42
- "width": 1024
43
- }
44
- },
45
- "required_runs": 20,
46
- "reference": {
47
- "baseline": {
48
- "path": "tests/snapshots/consumer-reference-card-grid.png",
49
- "sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837"
50
- },
51
- "source": {
52
- "path": "tests/helpers/render-consumer-reference.mjs",
53
- "sha256": "88802a948909d5e40470be6b5481766ce2de498e59c053ac68af370b46e72ca9"
54
- }
55
- },
56
- "runs": [
57
- {
58
- "architecture": "amd64",
59
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
60
- "completed": true,
61
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
62
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
63
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
64
- "run": 1,
65
- "screenshot_diff_pixels": 0
66
- },
67
- {
68
- "architecture": "amd64",
69
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
70
- "completed": true,
71
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
72
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
73
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
74
- "run": 2,
75
- "screenshot_diff_pixels": 0
76
- },
77
- {
78
- "architecture": "amd64",
79
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
80
- "completed": true,
81
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
82
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
83
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
84
- "run": 3,
85
- "screenshot_diff_pixels": 0
86
- },
87
- {
88
- "architecture": "amd64",
89
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
90
- "completed": true,
91
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
92
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
93
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
94
- "run": 4,
95
- "screenshot_diff_pixels": 0
96
- },
97
- {
98
- "architecture": "amd64",
99
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
100
- "completed": true,
101
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
102
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
103
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
104
- "run": 5,
105
- "screenshot_diff_pixels": 0
106
- },
107
- {
108
- "architecture": "amd64",
109
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
110
- "completed": true,
111
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
112
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
113
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
114
- "run": 6,
115
- "screenshot_diff_pixels": 0
116
- },
117
- {
118
- "architecture": "amd64",
119
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
120
- "completed": true,
121
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
122
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
123
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
124
- "run": 7,
125
- "screenshot_diff_pixels": 0
126
- },
127
- {
128
- "architecture": "amd64",
129
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
130
- "completed": true,
131
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
132
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
133
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
134
- "run": 8,
135
- "screenshot_diff_pixels": 0
136
- },
137
- {
138
- "architecture": "amd64",
139
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
140
- "completed": true,
141
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
142
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
143
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
144
- "run": 9,
145
- "screenshot_diff_pixels": 0
146
- },
147
- {
148
- "architecture": "amd64",
149
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
150
- "completed": true,
151
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
152
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
153
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
154
- "run": 10,
155
- "screenshot_diff_pixels": 0
156
- },
157
- {
158
- "architecture": "amd64",
159
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
160
- "completed": true,
161
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
162
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
163
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
164
- "run": 11,
165
- "screenshot_diff_pixels": 0
166
- },
167
- {
168
- "architecture": "amd64",
169
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
170
- "completed": true,
171
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
172
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
173
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
174
- "run": 12,
175
- "screenshot_diff_pixels": 0
176
- },
177
- {
178
- "architecture": "amd64",
179
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
180
- "completed": true,
181
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
182
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
183
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
184
- "run": 13,
185
- "screenshot_diff_pixels": 0
186
- },
187
- {
188
- "architecture": "amd64",
189
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
190
- "completed": true,
191
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
192
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
193
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
194
- "run": 14,
195
- "screenshot_diff_pixels": 0
196
- },
197
- {
198
- "architecture": "amd64",
199
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
200
- "completed": true,
201
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
202
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
203
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
204
- "run": 15,
205
- "screenshot_diff_pixels": 0
206
- },
207
- {
208
- "architecture": "amd64",
209
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
210
- "completed": true,
211
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
212
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
213
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
214
- "run": 16,
215
- "screenshot_diff_pixels": 0
216
- },
217
- {
218
- "architecture": "amd64",
219
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
220
- "completed": true,
221
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
222
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
223
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
224
- "run": 17,
225
- "screenshot_diff_pixels": 0
226
- },
227
- {
228
- "architecture": "amd64",
229
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
230
- "completed": true,
231
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
232
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
233
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
234
- "run": 18,
235
- "screenshot_diff_pixels": 0
236
- },
237
- {
238
- "architecture": "amd64",
239
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
240
- "completed": true,
241
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
242
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
243
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
244
- "run": 19,
245
- "screenshot_diff_pixels": 0
246
- },
247
- {
248
- "architecture": "amd64",
249
- "ax_sha256": "def6b05ea534a76b5362a436642f9790e464b4c6489a23118ff60b5eaee3aa1b",
250
- "completed": true,
251
- "dom_sha256": "ea28521d6b2e6b6d38b80a3a0411bddfd55da5f015b46271737c21c7f4098bb1",
252
- "metadata_sha256": "43a98d03b473e29c78ba2d359cf5f39346288d55564e5bfe65bc4a4fd78ebc2c",
253
- "png_sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837",
254
- "run": 20,
255
- "screenshot_diff_pixels": 0
256
- }
257
- ],
258
- "schema_version": "1.0",
259
- "status": "completed"
260
- }
@@ -1,21 +0,0 @@
1
- {
2
- "schema_version": "1.0",
3
- "status": "proposed",
4
- "baseline_owner_approval": "pending",
5
- "platform": "linux/amd64",
6
- "architecture": "amd64",
7
- "container_image": "mcr.microsoft.com/playwright:v1.61.0-noble@sha256:57b65fdc9ceabe0ef613124c7bbe2babcf9362c4d85e382fe3b03604e84b428a",
8
- "node": "22",
9
- "os": "Ubuntu 24.04",
10
- "playwright": "1.61.0",
11
- "browser_revision": "1228",
12
- "browser_version": "149.0.7827.55",
13
- "viewport": { "width": 1024, "height": 768 },
14
- "source": { "path": "tests/helpers/render-consumer-reference.mjs", "sha256": "88802a948909d5e40470be6b5481766ce2de498e59c053ac68af370b46e72ca9" },
15
- "baseline": { "path": "tests/snapshots/consumer-reference-card-grid.png", "sha256": "5528358e957a6115793155e501f62716f7db31dc1c86856d9e1234868d672837" },
16
- "calibration": {
17
- "record": "consumer-reference/baselines/calibration.json",
18
- "required_runs": 20,
19
- "workflow_artifact_name": "chromium-sentinel-calibration-${run_id}-${sha}"
20
- }
21
- }
@@ -1,282 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { execFileSync, spawnSync } from "node:child_process";
4
- import { fileURLToPath } from "node:url";
5
- import { canonicalSourceManifest, digest } from "../../../scripts/page-evidence-contract.mjs";
6
- import {
7
- cleanupFixture,
8
- finalizeSession,
9
- initializeConsumer,
10
- startSession,
11
- writeJson,
12
- writeRunner,
13
- } from "../../../scripts/page-evidence-fixture.mjs";
14
-
15
- const styleGalleryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
16
- const validator = path.join(styleGalleryRoot, "scripts", "validate-consumer-conformance.mjs");
17
-
18
- function runValidator(root, record, { artifactRoot, priorManifest } = {}) {
19
- const args = [validator, "--root", root, "--record", record];
20
- if (artifactRoot) args.push("--artifact-root", artifactRoot);
21
- if (priorManifest) args.push("--prior-manifest", priorManifest);
22
- args.push("--json");
23
- const child = spawnSync(process.execPath, args, { cwd: styleGalleryRoot, encoding: "utf8" });
24
- let output;
25
- try { output = JSON.parse(child.stdout); }
26
- catch { output = { failures: [], parse_error: child.stderr || child.stdout }; }
27
- return { output, status: child.status };
28
- }
29
-
30
- function codes(child) {
31
- return child?.report?.failures?.map((entry) => entry.code)
32
- ?? child?.output?.failures?.map((entry) => entry.code)
33
- ?? [];
34
- }
35
-
36
- function outcome(name, expected, child, observe = {}) {
37
- const actualCodes = codes(child);
38
- const childOk = expected === "ok:true"
39
- ? child?.status === 0 && (child.report?.ok === true || child.output?.ok === true)
40
- : child?.status !== 0 && actualCodes.includes(expected);
41
- const ok = childOk && !Object.values(observe).includes(false);
42
- return { actual: { codes: actualCodes, status: child?.status, ...observe }, expected, name, ok };
43
- }
44
-
45
- function sourceManifest(fixture) {
46
- const failures = [];
47
- const source = canonicalSourceManifest(fixture.root, fixture.relevantSources, failures);
48
- if (!source || failures.length > 0) throw new Error(`source fixture failed: ${JSON.stringify(failures)}`);
49
- return source;
50
- }
51
-
52
- function createSession(fixture, template, options = {}) {
53
- const artifactName = options.artifactName ?? "migration";
54
- const scenarioId = options.scenarioId ?? "migration-round-trip";
55
- const session = {
56
- artifactRoot: path.join(fixture.root, "evidence", artifactName),
57
- handoffFile: path.join(fixture.root, "records", `${artifactName}-handoff.json`),
58
- recordFile: path.join(fixture.root, "records", `${artifactName}.json`),
59
- runId: options.runId ?? `run-${artifactName}`,
60
- scenarioId,
61
- sessionId: options.sessionId ?? `session-${artifactName}`,
62
- };
63
- const value = structuredClone(template);
64
- const styleGalleryRevision = execFileSync("git", ["rev-parse", "HEAD"], { cwd: styleGalleryRoot, encoding: "utf8" }).trim();
65
- value.id = `${artifactName}-migration`;
66
- value.consumer = { relevant_sources: fixture.relevantSources, repository: fixture.repository, revision: fixture.revision };
67
- value.page_evidence = { manifest: `evidence/${artifactName}/page-evidence-manifest.json`, status: "applicable" };
68
- value.scenarios[0] = {
69
- ...value.scenarios[0],
70
- argv: ["node", "tests/page.spec.js"],
71
- evidence_method: "browser",
72
- id: scenarioId,
73
- result_artifact: `evidence/${artifactName}/runner/${scenarioId}.json`,
74
- run_id: session.runId,
75
- session_id: session.sessionId,
76
- source_digest: sourceManifest(fixture).sha256,
77
- };
78
- for (const dimension of Object.values(value.migration_dimensions)) if (dimension.status === "applicable") dimension.scenario_ids = [scenarioId];
79
- for (const mapping of value.adoption_mappings) {
80
- mapping.scenario_ids = [scenarioId];
81
- mapping.stylegallery.revision = styleGalleryRevision;
82
- }
83
- options.mutateRecord?.(value);
84
- writeJson(session.recordFile, value);
85
- writeJson(session.handoffFile, { consumer_conformance_record: `records/${artifactName}.json`, consumer_migration_readiness: "declared" });
86
- return session;
87
- }
88
-
89
- function startedSession(fixture, template, options) {
90
- const session = createSession(fixture, template, options);
91
- const start = startSession(fixture, session);
92
- if (start.status !== 0) throw new Error(`session start failed: ${JSON.stringify(start.report)}`);
93
- return session;
94
- }
95
-
96
- function isolated(template, run) {
97
- const fixture = initializeConsumer();
98
- try { return run(fixture, template); }
99
- finally { cleanupFixture(fixture); }
100
- }
101
-
102
- export function initializeCompletedConsumer(template) {
103
- const fixture = initializeConsumer();
104
- try {
105
- const session = startedSession(fixture, template);
106
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
107
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
108
- return { ...fixture, artifactRoot: session.artifactRoot, recordReference: "records/migration.json" };
109
- } catch (error) {
110
- cleanupFixture(fixture);
111
- throw error;
112
- }
113
- }
114
-
115
- export function cleanupCompletedConsumer(fixture) {
116
- cleanupFixture(fixture);
117
- }
118
-
119
- function mutatedCompletedPacket(template, { caseName, expected, mutateRecord }) {
120
- return isolated(template, (fixture, source) => {
121
- const session = startedSession(fixture, source, { artifactName: caseName });
122
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
123
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
124
- const value = JSON.parse(fs.readFileSync(session.recordFile, "utf8"));
125
- mutateRecord(value);
126
- writeJson(session.recordFile, value);
127
- return outcome(caseName, expected, runValidator(fixture.root, `records/${caseName}.json`, { artifactRoot: session.artifactRoot }));
128
- });
129
- }
130
-
131
- const cases = {
132
- "end-to-end-consumer": (template) => isolated(template, (fixture, source) => {
133
- const session = startedSession(fixture, source);
134
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
135
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
136
- const handoff = JSON.parse(fs.readFileSync(session.handoffFile, "utf8"));
137
- const child = runValidator(fixture.root, handoff.consumer_conformance_record, { artifactRoot: session.artifactRoot });
138
- return outcome("end-to-end-consumer", "ok:true", child, {
139
- artifactRootOutsideStyleGallery: !session.artifactRoot.startsWith(styleGalleryRoot),
140
- checkedDimensions: child.output.checkedDimensions,
141
- checkedMappings: child.output.checkedMappings,
142
- checkedPageArtifacts: child.output.checkedPageArtifacts,
143
- checkedPageScenarios: child.output.checkedPageScenarios,
144
- handoffLinked: handoff.consumer_migration_readiness === "declared" && handoff.consumer_conformance_record === "records/migration.json",
145
- pageSessionId: child.output.pageSessionId,
146
- });
147
- }),
148
- "missing-mapping": (template) => isolated(template, (fixture, source) => {
149
- const session = startedSession(fixture, source, { mutateRecord: (value) => {
150
- const unit = { ...value.scenarios[0], evidence_method: "unit", id: "unit-migration", result_artifact: "evidence/results/unit-migration.json" };
151
- value.scenarios.push(unit);
152
- value.adoption_mappings[0].scenario_ids = [unit.id];
153
- } });
154
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
155
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
156
- return outcome("missing-mapping", "page_evidence_adoption_mapping_missing", runValidator(fixture.root, "records/migration.json", { artifactRoot: session.artifactRoot }));
157
- }),
158
- "applicable-without-runtime": (template) => isolated(template, (fixture, source) => {
159
- const session = createSession(fixture, source, { mutateRecord: (value) => { value.scenarios[0].evidence_method = "unit"; } });
160
- fs.mkdirSync(session.artifactRoot, { recursive: true });
161
- return outcome("applicable-without-runtime", "page_evidence_runtime_scenario_required", runValidator(fixture.root, "records/migration.json", { artifactRoot: session.artifactRoot }));
162
- }),
163
- "dirty-source": (template) => isolated(template, (fixture, source) => {
164
- const session = createSession(fixture, source);
165
- fs.appendFileSync(path.join(fixture.root, fixture.relevantSources[0]), "// dirty\n");
166
- return outcome("dirty-source", "page_evidence_source_dirty", startSession(fixture, session));
167
- }),
168
- "failed-runner": (template) => isolated(template, (fixture, source) => {
169
- const session = startedSession(fixture, source);
170
- return outcome("failed-runner", "page_evidence_runner_failed", finalizeSession(fixture, session, writeRunner(fixture, session, { status: "failed" })));
171
- }),
172
- "cross-session-reuse": (template) => isolated(template, (fixture, source) => {
173
- const target = startedSession(fixture, source, { artifactName: "target" });
174
- const alternate = startedSession(fixture, source, { artifactName: "alternate" });
175
- const targetRunner = writeRunner(fixture, target);
176
- const alternateRunner = writeRunner(fixture, alternate);
177
- fs.copyFileSync(alternateRunner.runnerFile, targetRunner.runnerFile);
178
- fs.copyFileSync(path.join(alternate.artifactRoot, alternateRunner.artifactReference), path.join(target.artifactRoot, targetRunner.artifactReference));
179
- return outcome("cross-session-reuse", "page_evidence_session_mismatch", finalizeSession(fixture, target, targetRunner));
180
- }),
181
- "unmanifested-artifact": (template) => isolated(template, (fixture, source) => {
182
- const session = startedSession(fixture, source);
183
- const runner = writeRunner(fixture, session);
184
- fs.writeFileSync(path.join(session.artifactRoot, "rogue.png"), "rogue");
185
- return outcome("unmanifested-artifact", "page_evidence_artifact_unmanifested", finalizeSession(fixture, session, runner));
186
- }),
187
- "reuse-source-drift": (template) => isolated(template, (fixture, source) => {
188
- const prior = startedSession(fixture, source, { artifactName: "prior" });
189
- const priorFinalized = finalizeSession(fixture, prior, writeRunner(fixture, prior));
190
- if (priorFinalized.status !== 0) throw new Error(`prior finalize failed: ${JSON.stringify(priorFinalized.report)}`);
191
- fs.appendFileSync(path.join(fixture.root, fixture.relevantSources[0]), "// next revision\n");
192
- execFileSync("git", ["add", fixture.relevantSources[0]], { cwd: fixture.root });
193
- execFileSync("git", ["commit", "-m", "next fixture revision"], { cwd: fixture.root, stdio: "ignore" });
194
- fixture.revision = execFileSync("git", ["rev-parse", "HEAD"], { cwd: fixture.root, encoding: "utf8" }).trim();
195
- const current = startedSession(fixture, source, { artifactName: "current" });
196
- const priorManifest = path.join(prior.artifactRoot, "page-evidence-manifest.json");
197
- const evidence = {
198
- kind: "reused",
199
- prior_manifest_sha256: digest(fs.readFileSync(priorManifest)),
200
- prior_run_id: prior.runId,
201
- prior_scenario_id: prior.scenarioId,
202
- prior_session_id: prior.sessionId,
203
- };
204
- const runner = writeRunner(fixture, current, { evidence, writeArtifact: false });
205
- return outcome("reuse-source-drift", "page_evidence_reuse_source_mismatch", finalizeSession(fixture, current, runner, priorManifest));
206
- }),
207
- "source-set-mismatch": (template) => mutatedCompletedPacket(template, {
208
- caseName: "source-set-mismatch",
209
- expected: "page_evidence_source_set_mismatch",
210
- mutateRecord: (value) => { value.consumer.relevant_sources = value.consumer.relevant_sources.slice(0, 1); },
211
- }),
212
- "repository-mismatch": (template) => mutatedCompletedPacket(template, {
213
- caseName: "repository-mismatch",
214
- expected: "page_evidence_repository_mismatch",
215
- mutateRecord: (value) => { value.consumer.repository = "other/consumer"; },
216
- }),
217
- "revision-mismatch": (template) => mutatedCompletedPacket(template, {
218
- caseName: "revision-mismatch",
219
- expected: "page_evidence_revision_mismatch",
220
- mutateRecord: (value) => { value.consumer.revision = "0".repeat(40); },
221
- }),
222
- "source-digest-mismatch": (template) => mutatedCompletedPacket(template, {
223
- caseName: "source-digest-mismatch",
224
- expected: "page_evidence_source_mismatch",
225
- mutateRecord: (value) => { value.scenarios[0].source_digest = "0".repeat(64); },
226
- }),
227
- "intent-scenario-mismatch": (template) => mutatedCompletedPacket(template, {
228
- caseName: "intent-scenario-mismatch",
229
- expected: "page_evidence_intent_scenario_mismatch",
230
- mutateRecord: (value) => {
231
- const additional = { ...value.scenarios[0], id: "secondary-browser", result_artifact: "evidence/intent-scenario-mismatch/runner/secondary-browser.json" };
232
- value.scenarios.push(additional);
233
- value.migration_dimensions.route_parity.scenario_ids.push(additional.id);
234
- value.adoption_mappings[0].scenario_ids.push(additional.id);
235
- },
236
- }),
237
- "review-by-missing": (template) => isolated(template, (fixture, source) => {
238
- const session = startedSession(fixture, source, { artifactName: "review-by-missing" });
239
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
240
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
241
- const manifestFile = path.join(session.artifactRoot, "page-evidence-manifest.json");
242
- const manifest = JSON.parse(fs.readFileSync(manifestFile, "utf8"));
243
- delete manifest.review_by;
244
- writeJson(manifestFile, manifest);
245
- return outcome("review-by-missing", "page_evidence_manifest_schema_invalid", runValidator(fixture.root, "records/review-by-missing.json", { artifactRoot: session.artifactRoot }));
246
- }),
247
- "manifest-network-url": (template) => isolated(template, (fixture, source) => {
248
- const session = createSession(fixture, source, { artifactName: "manifest-network-url", mutateRecord: (value) => {
249
- value.page_evidence.manifest = "https://example.com/page-evidence-manifest.json";
250
- } });
251
- fs.mkdirSync(session.artifactRoot, { recursive: true });
252
- const child = runValidator(fixture.root, "records/manifest-network-url.json", { artifactRoot: session.artifactRoot });
253
- return outcome("manifest-network-url", "consumer_conformance_schema_invalid", child, {
254
- noRuntimeExecution: child.output.checkedRuntimeCommands === 0,
255
- });
256
- }),
257
- "manifest-symlink": (template) => isolated(template, (fixture, source) => {
258
- const session = startedSession(fixture, source, { artifactName: "manifest-symlink" });
259
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
260
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
261
- const manifest = path.join(session.artifactRoot, "page-evidence-manifest.json");
262
- const redirected = path.join(session.artifactRoot, "redirected-manifest.json");
263
- fs.renameSync(manifest, redirected);
264
- fs.symlinkSync(redirected, manifest);
265
- return outcome("manifest-symlink", "page_evidence_manifest_symlink", runValidator(fixture.root, "records/manifest-symlink.json", { artifactRoot: session.artifactRoot }));
266
- }),
267
- "artifact-root-redirect": (template) => isolated(template, (fixture, source) => {
268
- const session = startedSession(fixture, source, { artifactName: "artifact-root-redirect" });
269
- const finalized = finalizeSession(fixture, session, writeRunner(fixture, session));
270
- if (finalized.status !== 0) throw new Error(`session finalize failed: ${JSON.stringify(finalized.report)}`);
271
- const redirected = `${session.artifactRoot}-redirected`;
272
- fs.renameSync(session.artifactRoot, redirected);
273
- fs.symlinkSync(redirected, session.artifactRoot);
274
- return outcome("artifact-root-redirect", "page_evidence_artifact_symlink", runValidator(fixture.root, "records/artifact-root-redirect.json", { artifactRoot: session.artifactRoot }));
275
- }),
276
- };
277
-
278
- export const endToEndCaseNames = Object.freeze(Object.keys(cases));
279
-
280
- export function runEndToEndCase(name, template) {
281
- return cases[name](template);
282
- }
@@ -1,102 +0,0 @@
1
- {
2
- "id": "consumer-conformance-fixture-inventory",
3
- "invalid_cases": [
4
- {
5
- "expected_code": "migration_dimension_required",
6
- "name": "omitted-dimension"
7
- },
8
- {
9
- "expected_code": "migration_dimension_scenario_required",
10
- "name": "applicable-without-scenario"
11
- },
12
- {
13
- "expected_code": "runtime_evidence_method_invalid",
14
- "name": "source-regex-runtime-proof"
15
- },
16
- {
17
- "expected_code": "adoption_scenario_unknown",
18
- "name": "orphan-adoption-scenario"
19
- },
20
- {
21
- "expected_code": "adoption_consumer_target_invalid",
22
- "name": "malformed-local-target"
23
- },
24
- {
25
- "expected_code": "adoption_stylegallery_revision_unpinned",
26
- "name": "unpinned-stylegallery-revision"
27
- },
28
- {
29
- "expected_code": "adoption_stylegallery_revision_unknown",
30
- "name": "unknown-stylegallery-revision"
31
- },
32
- {
33
- "expected_code": "adoption_stylegallery_path_missing",
34
- "name": "missing-stylegallery-path"
35
- },
36
- {
37
- "expected_code": "adoption_stylegallery_anchor_missing",
38
- "name": "missing-stylegallery-anchor"
39
- },
40
- {
41
- "expected_code": "adoption_debt_incomplete",
42
- "name": "debt-without-lifecycle"
43
- },
44
- {
45
- "expected_code": "consumer_source_missing",
46
- "name": "missing-source"
47
- },
48
- {
49
- "expected_code": "consumer_source_symlink",
50
- "name": "symlink-source"
51
- },
52
- {
53
- "expected_code": "runtime_command_checkout_symlink",
54
- "name": "checkout-symlink"
55
- },
56
- {
57
- "expected_code": "runtime_result_artifact_missing",
58
- "name": "missing-result-artifact"
59
- },
60
- {
61
- "expected_code": "runtime_result_artifact_symlink",
62
- "name": "symlink-result-artifact"
63
- },
64
- {
65
- "expected_code": "runtime_result_artifact_json_invalid",
66
- "name": "invalid-result-artifact-json"
67
- },
68
- {
69
- "expected_code": "runtime_result_artifact_mismatch",
70
- "name": "fabricated-result-artifact"
71
- },
72
- {
73
- "expected_code": "consumer_repository_mismatch",
74
- "name": "fabricated-repository"
75
- },
76
- {
77
- "expected_code": "consumer_revision_unknown",
78
- "name": "fabricated-revision"
79
- },
80
- {
81
- "expected_code": "runtime_source_digest_mismatch",
82
- "name": "fabricated-source-digest"
83
- },
84
- {
85
- "expected_code": "runtime_command_failed",
86
- "name": "nonzero-command"
87
- },
88
- {
89
- "expected_code": "runtime_command_result_missing",
90
- "name": "forged-noop-result"
91
- },
92
- {
93
- "expected_code": "consumer_repository_mismatch",
94
- "name": "github-repository-spoof"
95
- }
96
- ],
97
- "schema_record": "consumer-reference/schema/consumer-conformance-record.schema.json",
98
- "schema_version": "1.0",
99
- "valid_records": [
100
- "valid-migration.json"
101
- ]
102
- }