stylegallery 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +156 -0
- package/CATALOG.md +69 -0
- package/DOMAINS.md +65 -0
- package/GOVERNANCE.md +222 -0
- package/GUIDE.md +59 -0
- package/README.md +313 -0
- package/consumer-reference/adapters/style-dictionary.config.mjs +36 -0
- package/consumer-reference/agent-native/README.md +157 -0
- package/consumer-reference/agent-native/registry.json +640 -0
- package/consumer-reference/agent-native/schema/agent-native.schema.json +848 -0
- package/consumer-reference/agent-native/schema/epistemic.schema.json +14 -0
- package/consumer-reference/agent-native/schema/execution.schema.json +12 -0
- package/consumer-reference/agent-native/schema/identity.schema.json +10 -0
- package/consumer-reference/agent-native/schema/learning.schema.json +12 -0
- package/consumer-reference/agent-native/schema/manifest.schema.json +6 -0
- package/consumer-reference/agent-native/schema/operation.schema.json +12 -0
- package/consumer-reference/agent-native/schema/protocol-binding.schema.json +9 -0
- package/consumer-reference/agent-native/schema/retrieval.schema.json +10 -0
- package/consumer-reference/baselines/calibration.json +260 -0
- package/consumer-reference/baselines/manifest.json +21 -0
- package/consumer-reference/contract.md +83 -0
- package/consumer-reference/fixtures/consumer-conformance/e2e-fixture.mjs +282 -0
- package/consumer-reference/fixtures/consumer-conformance/manifest.json +102 -0
- package/consumer-reference/fixtures/consumer-conformance/runtime-proof.mjs +32 -0
- package/consumer-reference/fixtures/consumer-conformance/valid-migration-result.json +18 -0
- package/consumer-reference/fixtures/consumer-conformance/valid-migration.json +142 -0
- package/consumer-reference/fixtures/invalid-stable-ended-support.json +19 -0
- package/consumer-reference/fixtures/promotion/invalid-blocking-evidence.json +26 -0
- package/consumer-reference/fixtures/promotion/invalid-count-only.json +29 -0
- package/consumer-reference/fixtures/promotion/invalid-missing-owner-migration.json +25 -0
- package/consumer-reference/fixtures/promotion/invalid-normative-bypass-no-regression.json +25 -0
- package/consumer-reference/fixtures/promotion/invalid-related-counted-independent.json +45 -0
- package/consumer-reference/fixtures/promotion/invalid-stable-ended-support.json +26 -0
- package/consumer-reference/fixtures/promotion/manifest.json +15 -0
- package/consumer-reference/fixtures/promotion/valid-deferred-example.json +67 -0
- package/consumer-reference/fixtures/promotion/valid-normative-bypass.json +67 -0
- package/consumer-reference/fixtures/token-portability/invalid-cycle.json +7 -0
- package/consumer-reference/fixtures/token-portability/invalid-dangling-alias.json +6 -0
- package/consumer-reference/fixtures/token-portability/invalid-extends.json +4 -0
- package/consumer-reference/fixtures/token-portability/invalid-json-pointer.json +7 -0
- package/consumer-reference/fixtures/token-portability/invalid-resolver.json +9 -0
- package/consumer-reference/fixtures/token-portability/invalid-type-mismatch.json +10 -0
- package/consumer-reference/fixtures/token-portability/invalid-unknown-reserved.json +6 -0
- package/consumer-reference/fixtures/token-portability/invalid-untested-type.json +6 -0
- package/consumer-reference/fixtures/token-portability/valid-border.json +14 -0
- package/consumer-reference/fixtures/token-portability/valid-reference.json +32 -0
- package/consumer-reference/fixtures/token-portability/valid-whole-alias.json +7 -0
- package/consumer-reference/fixtures/valid-deprecated.json +21 -0
- package/consumer-reference/fixtures/valid-experimental.json +19 -0
- package/consumer-reference/generated/manifest.json +40 -0
- package/consumer-reference/generated/tokens.css +12 -0
- package/consumer-reference/index.md +32 -0
- package/consumer-reference/policies/shared-experimental.json +37 -0
- package/consumer-reference/schema/ax-evidence.schema.json +30 -0
- package/consumer-reference/schema/baseline-manifest.schema.json +55 -0
- package/consumer-reference/schema/calibration-record.schema.json +190 -0
- package/consumer-reference/schema/capture-session.schema.json +161 -0
- package/consumer-reference/schema/component-state.schema.json +150 -0
- package/consumer-reference/schema/consumer-conformance-record.schema.json +365 -0
- package/consumer-reference/schema/dom-evidence.schema.json +38 -0
- package/consumer-reference/schema/evidence-record.schema.json +81 -0
- package/consumer-reference/schema/fixture-manifest.schema.json +32 -0
- package/consumer-reference/schema/item.schema.json +188 -0
- package/consumer-reference/schema/page-evidence-manifest.schema.json +216 -0
- package/consumer-reference/schema/page-evidence-session.schema.json +119 -0
- package/consumer-reference/schema/portable-tokens.schema.json +104 -0
- package/consumer-reference/schema/promotion-rfc.schema.json +219 -0
- package/consumer-reference/schema/runtime-evidence-manifest.schema.json +33 -0
- package/consumer-reference/schema/visual-evidence.schema.json +31 -0
- package/design-engineering/consumer-migration-readiness.md +124 -0
- package/design-engineering/index.md +28 -0
- package/design-engineering/interface-craft.md +107 -0
- package/design-engineering/reference-profiles/external-adaptation/index.md +12 -0
- package/design-engineering/reference-profiles/governed-local/editorial/components/button.component.json +125 -0
- package/design-engineering/reference-profiles/governed-local/editorial/evidence/button.evidence.json +3504 -0
- package/design-engineering/reference-profiles/governed-local/editorial/fixtures/button.fixture.json +65 -0
- package/design-engineering/reference-profiles/governed-local/editorial/generated/evidence-coverage.md +23 -0
- package/design-engineering/reference-profiles/governed-local/editorial/generated/keyboard-matrix.md +19 -0
- package/design-engineering/reference-profiles/governed-local/editorial/generated/state-matrix.md +21 -0
- package/design-engineering/reference-profiles/governed-local/editorial/local-foundations.json +12 -0
- package/design-engineering/reference-profiles/governed-local/editorial/profile.json +43 -0
- package/design-engineering/reference-profiles/governed-local/editorial/states/button.states.json +195 -0
- package/design-engineering/reference-profiles/governed-local/editorial/tokens.dtcg.json +17 -0
- package/design-engineering/reference-profiles/governed-local/index.md +26 -0
- package/design-engineering/reference-profiles/governed-local/terminal/components/button.component.json +125 -0
- package/design-engineering/reference-profiles/governed-local/terminal/evidence/button.evidence.json +3504 -0
- package/design-engineering/reference-profiles/governed-local/terminal/fixtures/button.fixture.json +65 -0
- package/design-engineering/reference-profiles/governed-local/terminal/generated/evidence-coverage.md +23 -0
- package/design-engineering/reference-profiles/governed-local/terminal/generated/keyboard-matrix.md +19 -0
- package/design-engineering/reference-profiles/governed-local/terminal/generated/state-matrix.md +21 -0
- package/design-engineering/reference-profiles/governed-local/terminal/local-foundations.json +12 -0
- package/design-engineering/reference-profiles/governed-local/terminal/profile.json +43 -0
- package/design-engineering/reference-profiles/governed-local/terminal/states/button.states.json +195 -0
- package/design-engineering/reference-profiles/governed-local/terminal/tokens.dtcg.json +17 -0
- package/design-engineering/reference-profiles/index.md +19 -0
- package/game-ui/classification.md +82 -0
- package/game-ui/index.md +35 -0
- package/game-ui/reference-record.md +62 -0
- package/game-ui/screen-hierarchy.md +107 -0
- package/game-ui/unity/architecture.md +166 -0
- package/game-ui/unity/cli-loop.md +84 -0
- package/game-ui/unity/data/unity-technologies-public-repositories.json +26654 -0
- package/game-ui/unity/org-wiki.md +146 -0
- package/game-ui/unity/repository-map.md +102 -0
- package/game-ui/unity/ui-systems.md +85 -0
- package/guides/decision-tree.md +149 -0
- package/guides/documentation-mode-taxonomy.md +157 -0
- package/guides/layout-brief.md +220 -0
- package/guides/vocabulary.md +148 -0
- package/guides/webpage-generation-workflow.md +185 -0
- package/index.md +36 -0
- package/layout/index.md +26 -0
- package/motion/index.md +24 -0
- package/motion/practice-reference.md +145 -0
- package/motion/review-workflow.md +86 -0
- package/motion/vocabulary.md +82 -0
- package/package.json +78 -0
- package/patterns/centering/center.md +87 -0
- package/patterns/centering/index.md +6 -0
- package/patterns/centering/super-center.md +89 -0
- package/patterns/containment/box.md +87 -0
- package/patterns/containment/clamped-card.md +86 -0
- package/patterns/containment/content-limiter.md +87 -0
- package/patterns/containment/fluid-styles.md +86 -0
- package/patterns/containment/index.md +8 -0
- package/patterns/grid-repetition/card-grid.md +88 -0
- package/patterns/grid-repetition/columns.md +87 -0
- package/patterns/grid-repetition/dense-grid.md +88 -0
- package/patterns/grid-repetition/grid-wrapper.md +89 -0
- package/patterns/grid-repetition/index.md +12 -0
- package/patterns/grid-repetition/masonry-approx.md +87 -0
- package/patterns/grid-repetition/page-grid.md +90 -0
- package/patterns/grid-repetition/ram-grid.md +88 -0
- package/patterns/grid-repetition/twelve-span-grid.md +92 -0
- package/patterns/in-line-grouping/badge-list.md +94 -0
- package/patterns/in-line-grouping/breadcrumb.md +89 -0
- package/patterns/in-line-grouping/cluster.md +89 -0
- package/patterns/in-line-grouping/deconstructed-pancake.md +92 -0
- package/patterns/in-line-grouping/index.md +13 -0
- package/patterns/in-line-grouping/pagination.md +89 -0
- package/patterns/in-line-grouping/reel.md +90 -0
- package/patterns/in-line-grouping/split-nav.md +97 -0
- package/patterns/in-line-grouping/tab-strip.md +88 -0
- package/patterns/in-line-grouping/wrap-row.md +89 -0
- package/patterns/index.md +13 -0
- package/patterns/media-fit/frame.md +95 -0
- package/patterns/media-fit/icon-frame.md +87 -0
- package/patterns/media-fit/index.md +6 -0
- package/patterns/overlay-exception/imposter.md +95 -0
- package/patterns/overlay-exception/index.md +6 -0
- package/patterns/overlay-exception/overlay-stack.md +89 -0
- package/patterns/split-sidebar/index.md +12 -0
- package/patterns/split-sidebar/list-detail.md +95 -0
- package/patterns/split-sidebar/main-with-rail.md +95 -0
- package/patterns/split-sidebar/media-object.md +102 -0
- package/patterns/split-sidebar/sidebar.md +101 -0
- package/patterns/split-sidebar/split-screen.md +92 -0
- package/patterns/split-sidebar/sticky-aside.md +97 -0
- package/patterns/split-sidebar/supporting-pane.md +95 -0
- package/patterns/split-sidebar/switcher.md +93 -0
- package/patterns/stacking/feed.md +88 -0
- package/patterns/stacking/index.md +8 -0
- package/patterns/stacking/line-up.md +95 -0
- package/patterns/stacking/stack.md +87 -0
- package/patterns/stacking/step-nav.md +88 -0
- package/patterns/viewport-shell/cover.md +90 -0
- package/patterns/viewport-shell/fixed-sidenav-shell.md +97 -0
- package/patterns/viewport-shell/holy-grail.md +112 -0
- package/patterns/viewport-shell/index.md +11 -0
- package/patterns/viewport-shell/panel-layout.md +95 -0
- package/patterns/viewport-shell/scroll-body-shell.md +93 -0
- package/patterns/viewport-shell/sticky-footer.md +92 -0
- package/patterns/viewport-shell/sticky-header.md +86 -0
- package/platform-guides/apple-interaction.md +89 -0
- package/platform-guides/index.md +26 -0
- package/quality/claim-records/index.md +3 -0
- package/quality/claim-records/samples.md +92 -0
- package/quality/claim-records/stylegallery-multidomain-scope.md +42 -0
- package/quality/claims.md +77 -0
- package/quality/evidence/accessibility.md +58 -0
- package/quality/evidence/consumer-migration.md +42 -0
- package/quality/evidence/design-rationale.md +34 -0
- package/quality/evidence/executable-evidence.md +79 -0
- package/quality/evidence/families.md +56 -0
- package/quality/evidence/hci-evaluation.md +36 -0
- package/quality/evidence/index.md +16 -0
- package/quality/evidence/pattern-contract-audit.md +96 -0
- package/quality/evidence/search-metadata-polyhierarchy.md +86 -0
- package/quality/evidence/sources.md +43 -0
- package/quality/evidence/tokens.md +33 -0
- package/quality/evidence/visual-qa.md +41 -0
- package/quality/gates/accessibility-evidence.md +60 -0
- package/quality/gates/consumer-migration-evidence.md +53 -0
- package/quality/gates/design-claim.md +56 -0
- package/quality/gates/harmony-evaluation.md +78 -0
- package/quality/gates/index.md +13 -0
- package/quality/gates/layout.md +52 -0
- package/quality/gates/rationale.md +53 -0
- package/quality/gates/visual-evidence.md +47 -0
- package/quality/index.md +55 -0
- package/quality/principles.md +58 -0
- package/recipes/article-page.md +52 -0
- package/recipes/command-surface.md +55 -0
- package/recipes/dashboard.md +56 -0
- package/recipes/form-flow.md +55 -0
- package/recipes/homepage.md +89 -0
- package/recipes/index.md +13 -0
- package/recipes/list-detail.md +55 -0
- package/recipes/primitive-to-recipe-matrix.md +83 -0
- package/recipes/saas-settings.md +52 -0
- package/scripts/agent-native/a2a-projection.mjs +248 -0
- package/scripts/agent-native/agui-projection.mjs +178 -0
- package/scripts/agent-native/canonical-json.mjs +109 -0
- package/scripts/agent-native/cli-adapter.mjs +68 -0
- package/scripts/agent-native/events.mjs +113 -0
- package/scripts/agent-native/execution.mjs +227 -0
- package/scripts/agent-native/fixture.mjs +159 -0
- package/scripts/agent-native/identity.mjs +184 -0
- package/scripts/agent-native/immutable-store.mjs +102 -0
- package/scripts/agent-native/knowledge.mjs +168 -0
- package/scripts/agent-native/learning-records.mjs +244 -0
- package/scripts/agent-native/learning.mjs +247 -0
- package/scripts/agent-native/mcp-adapter.mjs +173 -0
- package/scripts/agent-native/queries.mjs +173 -0
- package/scripts/agent-native/registry.mjs +154 -0
- package/scripts/agent-native/retrieval.mjs +171 -0
- package/scripts/agent-native/self-description.mjs +160 -0
- package/scripts/artifact-metadata.mjs +20 -0
- package/scripts/audit-evidence-freshness.mjs +308 -0
- package/scripts/baseline-contract.mjs +189 -0
- package/scripts/baseline-schema-parity.mjs +40 -0
- package/scripts/build-reference-artifacts.mjs +127 -0
- package/scripts/calibration-raw-contract.mjs +172 -0
- package/scripts/capture-session-contract.mjs +187 -0
- package/scripts/component-state-artifact-fixture.mjs +44 -0
- package/scripts/component-state-contract.mjs +99 -0
- package/scripts/component-state-semantics.mjs +128 -0
- package/scripts/component-state-workflow-contract.mjs +67 -0
- package/scripts/component-state-workflow-negative-cases.mjs +64 -0
- package/scripts/consumer-conformance-contract.mjs +198 -0
- package/scripts/consumer-evidence-governance-contract.mjs +210 -0
- package/scripts/consumer-reference-case-runner.mjs +93 -0
- package/scripts/consumer-reference-schema.mjs +155 -0
- package/scripts/create-component-state-session.mjs +100 -0
- package/scripts/create-page-evidence-session.mjs +139 -0
- package/scripts/domain-document-boundaries.mjs +40 -0
- package/scripts/domain-validation-checks.mjs +141 -0
- package/scripts/evidence-artifact-contract.mjs +191 -0
- package/scripts/finalize-component-state-evidence.mjs +165 -0
- package/scripts/finalize-page-evidence.mjs +197 -0
- package/scripts/generate-consumer-reference-evidence.mjs +154 -0
- package/scripts/generate-patterns.mjs +218 -0
- package/scripts/governance-matrix-contract.mjs +73 -0
- package/scripts/governance-matrix-negative-cases.mjs +114 -0
- package/scripts/governance-policy-contract.mjs +49 -0
- package/scripts/governance-test-fixture.mjs +321 -0
- package/scripts/governance-workflow-negative-cases.mjs +241 -0
- package/scripts/governed-profile-registry.mjs +125 -0
- package/scripts/json-schema-formats.mjs +31 -0
- package/scripts/markdown-structure.mjs +45 -0
- package/scripts/page-artifact-metadata.mjs +124 -0
- package/scripts/page-evidence-contract.mjs +297 -0
- package/scripts/page-evidence-fixture.mjs +271 -0
- package/scripts/pattern-data.mjs +325 -0
- package/scripts/profile-record-contract.mjs +140 -0
- package/scripts/promotion-attestation-contract.mjs +91 -0
- package/scripts/promotion-boundary-test-contract.mjs +92 -0
- package/scripts/promotion-fixture-inventory.mjs +109 -0
- package/scripts/promotion-governance-contract.mjs +28 -0
- package/scripts/reference-artifact-path-contract.mjs +28 -0
- package/scripts/reference-profile-contract.mjs +114 -0
- package/scripts/reference-token-contract.mjs +156 -0
- package/scripts/run-consumer-page-evidence-ci.mjs +170 -0
- package/scripts/sg-mcp.mjs +16 -0
- package/scripts/sg.mjs +27 -0
- package/scripts/strict-json.mjs +72 -0
- package/scripts/summarize-sentinel-calibration.mjs +98 -0
- package/scripts/test-agent-adapter-conformance.mjs +250 -0
- package/scripts/test-agent-conformance-receipt.mjs +106 -0
- package/scripts/test-agent-events.mjs +81 -0
- package/scripts/test-agent-execution-effects.mjs +114 -0
- package/scripts/test-agent-execution-fixtures.mjs +140 -0
- package/scripts/test-agent-execution-kernel.mjs +39 -0
- package/scripts/test-agent-execution-learning.mjs +130 -0
- package/scripts/test-agent-execution-lifecycle.mjs +143 -0
- package/scripts/test-agent-execution-safety.mjs +158 -0
- package/scripts/test-agent-execution-views.mjs +117 -0
- package/scripts/test-agent-identity-integrity-cases.mjs +160 -0
- package/scripts/test-agent-knowledge-kernel.mjs +183 -0
- package/scripts/test-agent-learning.mjs +246 -0
- package/scripts/test-agent-mcp.mjs +246 -0
- package/scripts/test-agent-native-schemas.mjs +215 -0
- package/scripts/test-agent-projections.mjs +249 -0
- package/scripts/test-agent-registry-mcp-integrity.mjs +215 -0
- package/scripts/test-agent-registry-mutations.mjs +110 -0
- package/scripts/test-audit-evidence-freshness.mjs +177 -0
- package/scripts/test-component-state-sentinel.mjs +35 -0
- package/scripts/test-component-state-source-contract.mjs +83 -0
- package/scripts/test-consumer-conformance-sentinel.mjs +165 -0
- package/scripts/test-consumer-reference-sentinel.mjs +31 -0
- package/scripts/test-generate-consumer-reference-evidence.mjs +124 -0
- package/scripts/test-json-cli-output.mjs +151 -0
- package/scripts/test-json-schema-formats.mjs +40 -0
- package/scripts/test-reference-adapters.mjs +199 -0
- package/scripts/test-renderer-purity.mjs +34 -0
- package/scripts/test-sg-cli.mjs +129 -0
- package/scripts/test-summarize-sentinel-calibration.mjs +226 -0
- package/scripts/test-validate-baseline-manifest.mjs +234 -0
- package/scripts/test-validate-component-state-artifacts.mjs +243 -0
- package/scripts/test-validate-component-state.mjs +106 -0
- package/scripts/test-validate-consumer-conformance.mjs +427 -0
- package/scripts/test-validate-consumer-reference-cli.mjs +69 -0
- package/scripts/test-validate-consumer-reference.mjs +263 -0
- package/scripts/test-validate-domains.mjs +357 -0
- package/scripts/test-validate-governance.mjs +292 -0
- package/scripts/test-validate-ia.mjs +262 -0
- package/scripts/test-validate-okf.mjs +73 -0
- package/scripts/test-validate-page-evidence.mjs +302 -0
- package/scripts/test-validate-patterns.mjs +157 -0
- package/scripts/test-validate-promotion-rfc.mjs +250 -0
- package/scripts/test-validate-reference-profiles.mjs +170 -0
- package/scripts/test-validate-unity-org-wiki.mjs +57 -0
- package/scripts/test-validate-unity-source-contracts.mjs +67 -0
- package/scripts/test-validate-vocabulary.mjs +174 -0
- package/scripts/test-validate-webpage-workflow.mjs +293 -0
- package/scripts/validate-baseline-manifest.mjs +44 -0
- package/scripts/validate-catalog.mjs +65 -0
- package/scripts/validate-component-state.mjs +141 -0
- package/scripts/validate-consumer-conformance.mjs +477 -0
- package/scripts/validate-consumer-reference.mjs +288 -0
- package/scripts/validate-domains.mjs +237 -0
- package/scripts/validate-governance.mjs +248 -0
- package/scripts/validate-ia.mjs +136 -0
- package/scripts/validate-links.mjs +66 -0
- package/scripts/validate-okf.mjs +104 -0
- package/scripts/validate-page-evidence.mjs +191 -0
- package/scripts/validate-patterns.mjs +246 -0
- package/scripts/validate-promotion-rfc.mjs +224 -0
- package/scripts/validate-reference-artifacts.mjs +125 -0
- package/scripts/validate-renderer-purity.mjs +56 -0
- package/scripts/validate-unity-org-wiki.mjs +146 -0
- package/scripts/validate-unity-source-contracts.mjs +107 -0
- package/scripts/validate-vocabulary.mjs +115 -0
- package/scripts/validate-webpage-workflow.mjs +254 -0
- package/scripts/visual-expectation-contract.mjs +20 -0
- package/scripts/workflow-action-contract.mjs +163 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { sentinelProvenanceClauses } from "./governance-policy-contract.mjs";
|
|
2
|
+
|
|
3
|
+
export const generatedWarning = "<!-- Generated from `scripts/generate-patterns.mjs` and `scripts/pattern-data.mjs`. Do not hand-edit generated catalog or pattern docs; edit the source files and regenerate. -->";
|
|
4
|
+
export { sentinelProvenanceClauses };
|
|
5
|
+
|
|
6
|
+
export const files = {
|
|
7
|
+
"AGENTS.md": "# Agent Instructions\n\nSee [Governance, Lifecycle, And Docs-As-Code](GOVERNANCE.md) and [StyleGallery Domains](DOMAINS.md).\n",
|
|
8
|
+
"README.md": "# StyleGallery\n\n- [Governance, Lifecycle, And Docs-As-Code](GOVERNANCE.md)\n- [StyleGallery Domains](DOMAINS.md)\n",
|
|
9
|
+
"index.md": "# StyleGallery\n\n- [Governance, lifecycle, and docs-as-code](GOVERNANCE.md)\n- [StyleGallery Domains](DOMAINS.md)\n",
|
|
10
|
+
"DOMAINS.md": "# StyleGallery Domains\n\n### Consumer Reference Promotion\n\nPromotion records are JSON-only.\n",
|
|
11
|
+
"consumer-reference/contract.md": `They are not accepted or promoted RFCs.\nReview truth uses one enum; boolean aliases are invalid.\n${sentinelProvenanceClauses.join("\n")}\n`,
|
|
12
|
+
"consumer-reference/index.md": "[Promotion RFC schema](schema/promotion-rfc.schema.json)\n[Shared-experimental promotion policy](policies/shared-experimental.json)\n",
|
|
13
|
+
"consumer-reference/fixtures/promotion/manifest.json": '{"id": "promotion-fixture-inventory"}\n',
|
|
14
|
+
"consumer-reference/policies/shared-experimental.json": '{"review_independence": "single_account", "promotion_occurred": false, "adopter_attestations": 0, "stable_numeric_threshold": null}\n',
|
|
15
|
+
"CATALOG.md": `# Layout Pattern Catalog\n\n${generatedWarning}\n`,
|
|
16
|
+
"patterns/index.md": `# Pattern Categories\n\n${generatedWarning}\n`,
|
|
17
|
+
"patterns/stacking/index.md": `# Stacking\n\n${generatedWarning}\n`,
|
|
18
|
+
"patterns/stacking/stack.md": [
|
|
19
|
+
"---",
|
|
20
|
+
"lifecycle: generated",
|
|
21
|
+
"generated_from: scripts/generate-patterns.mjs, scripts/pattern-data.mjs",
|
|
22
|
+
"---",
|
|
23
|
+
"",
|
|
24
|
+
"# stack",
|
|
25
|
+
"",
|
|
26
|
+
generatedWarning,
|
|
27
|
+
"",
|
|
28
|
+
].join("\n"),
|
|
29
|
+
"quality/evidence/executable-evidence.md": [
|
|
30
|
+
"| Claim | Validator or test | CI command | Positive evidence | Negative evidence | Evidence boundary |",
|
|
31
|
+
"| Governance, lifecycle, generated-file, ownership, and stale-content policy remain discoverable and CI-enforced. | `scripts/validate-governance.mjs` and `scripts/test-validate-governance.mjs` | `node scripts/validate-governance.mjs --json`; `node scripts/test-validate-governance.mjs --json` | `GOVERNANCE.md`, `.github/CODEOWNERS`, generated warnings, generated metadata, root links, lifecycle states, stale-audit decision, and CI wiring are present. | Missing governance file, generated warning, generated metadata, CODEOWNERS coverage, or stale policy fixtures must fail. | Proves governance policy is present and linked, not that CODEOWNERS users have verified repository write access. |",
|
|
32
|
+
"| Domain topology, metadata, provenance, scope boundaries, and root routes remain enforced. | `scripts/validate-domains.mjs` and `scripts/test-validate-domains.mjs` | `node scripts/validate-domains.mjs --json`; `node scripts/test-validate-domains.mjs` | Five governed domains and their declared leaves are reachable and attributed. | Domain metadata, immutable provenance, scope boundaries, and root-route fixtures must fail. | A full SHA proves content identity syntax, not publisher authenticity or local quality. |",
|
|
33
|
+
"Consumer-reference handoffs, schema/runtime parity, and containment remain enforced; repository handoff omissions must fail.",
|
|
34
|
+
"Promotion governance remains a closed JSON-only, invariant-scoped, deferred example contract.",
|
|
35
|
+
"Synthetic validation does not authenticate adoption, organizations, owners, support capacity, provenance, or a promotion decision.",
|
|
36
|
+
"The proposed Chromium sentinel preserves canonical card-grid geometry and truth-derived calibration evidence.",
|
|
37
|
+
"Governed-local button states retain source-bound visual, DOM, and accessibility-tree evidence across both example profiles.",
|
|
38
|
+
"one clean capture session binds the browser artifacts to the governed source inventory",
|
|
39
|
+
"It does not prove product suitability, independent adoption, full accessibility, cross-browser behavior, or owner approval",
|
|
40
|
+
"Explicit evidence deadlines are audited weekly without inventing a repository-wide maximum age.",
|
|
41
|
+
"Malformed records and auditor failures remain blocking even though due-date findings are advisory.",
|
|
42
|
+
"Linux/amd64 20-run calibration and `baseline_owner_approval` remain pending.",
|
|
43
|
+
...sentinelProvenanceClauses,
|
|
44
|
+
"",
|
|
45
|
+
].join("\n"),
|
|
46
|
+
".github/CODEOWNERS": [
|
|
47
|
+
"* @changeroa",
|
|
48
|
+
"/GOVERNANCE.md @changeroa",
|
|
49
|
+
"/README.md @changeroa",
|
|
50
|
+
"/index.md @changeroa",
|
|
51
|
+
"/AGENTS.md @changeroa",
|
|
52
|
+
"/DOMAINS.md @changeroa",
|
|
53
|
+
"/GUIDE.md @changeroa",
|
|
54
|
+
"/guides/ @changeroa",
|
|
55
|
+
"/recipes/ @changeroa",
|
|
56
|
+
"/quality/ @changeroa",
|
|
57
|
+
"/layout/ @changeroa",
|
|
58
|
+
"/motion/ @changeroa",
|
|
59
|
+
"/design-engineering/ @changeroa",
|
|
60
|
+
"/game-ui/ @changeroa",
|
|
61
|
+
"/platform-guides/ @changeroa",
|
|
62
|
+
"/consumer-reference/ @changeroa",
|
|
63
|
+
"/consumer-reference/baselines/ @changeroa",
|
|
64
|
+
"/consumer-reference/policies/ @changeroa",
|
|
65
|
+
"/consumer-reference/fixtures/promotion/ @changeroa",
|
|
66
|
+
"/consumer-reference/schema/promotion-rfc.schema.json @changeroa",
|
|
67
|
+
"/tests/ @changeroa",
|
|
68
|
+
"/playwright.config.mjs @changeroa",
|
|
69
|
+
"/scripts/pattern-data.mjs @changeroa",
|
|
70
|
+
"/scripts/generate-patterns.mjs @changeroa",
|
|
71
|
+
"/patterns/ @changeroa",
|
|
72
|
+
"/CATALOG.md @changeroa",
|
|
73
|
+
"/.github/workflows/validate.yml @changeroa",
|
|
74
|
+
"/.github/ @changeroa",
|
|
75
|
+
"/scripts/ @changeroa",
|
|
76
|
+
"/scripts/validate-*.mjs @changeroa",
|
|
77
|
+
"/scripts/test-validate-*.mjs @changeroa",
|
|
78
|
+
"",
|
|
79
|
+
].join("\n"),
|
|
80
|
+
".github/workflows/validate.yml": [
|
|
81
|
+
"jobs:",
|
|
82
|
+
" validate:",
|
|
83
|
+
" steps:",
|
|
84
|
+
" - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4",
|
|
85
|
+
" with:",
|
|
86
|
+
" persist-credentials: false",
|
|
87
|
+
" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4",
|
|
88
|
+
" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4",
|
|
89
|
+
" - run: |",
|
|
90
|
+
"node -c scripts/component-state-workflow-contract.mjs",
|
|
91
|
+
"node -c scripts/consumer-evidence-governance-contract.mjs",
|
|
92
|
+
"node -c scripts/promotion-fixture-inventory.mjs",
|
|
93
|
+
"node -c scripts/promotion-boundary-test-contract.mjs",
|
|
94
|
+
"node -c scripts/validate-governance.mjs",
|
|
95
|
+
"node -c scripts/test-validate-governance.mjs",
|
|
96
|
+
"node scripts/validate-governance.mjs --json",
|
|
97
|
+
"node scripts/test-validate-governance.mjs --json",
|
|
98
|
+
"node -c scripts/validate-domains.mjs",
|
|
99
|
+
"node -c scripts/test-validate-domains.mjs",
|
|
100
|
+
"node scripts/validate-domains.mjs --json",
|
|
101
|
+
"node scripts/test-validate-domains.mjs",
|
|
102
|
+
"node scripts/validate-webpage-workflow.mjs --json",
|
|
103
|
+
"node scripts/test-validate-webpage-workflow.mjs --json",
|
|
104
|
+
"node -c scripts/validate-consumer-reference.mjs",
|
|
105
|
+
"node -c scripts/test-validate-consumer-reference.mjs",
|
|
106
|
+
"node -c scripts/consumer-reference-case-runner.mjs",
|
|
107
|
+
"node -c scripts/governed-profile-registry.mjs",
|
|
108
|
+
"node -c scripts/promotion-attestation-contract.mjs",
|
|
109
|
+
"node -c scripts/validate-promotion-rfc.mjs",
|
|
110
|
+
"node -c scripts/test-validate-promotion-rfc.mjs",
|
|
111
|
+
"node -c scripts/json-schema-formats.mjs",
|
|
112
|
+
"node -c scripts/consumer-conformance-contract.mjs",
|
|
113
|
+
"node -c scripts/validate-consumer-conformance.mjs",
|
|
114
|
+
"node -c scripts/test-validate-consumer-conformance.mjs",
|
|
115
|
+
"node -c consumer-reference/fixtures/consumer-conformance/e2e-fixture.mjs",
|
|
116
|
+
"node -c scripts/page-evidence-contract.mjs",
|
|
117
|
+
"node -c scripts/page-evidence-fixture.mjs",
|
|
118
|
+
"node -c scripts/create-page-evidence-session.mjs",
|
|
119
|
+
"node -c scripts/finalize-page-evidence.mjs",
|
|
120
|
+
"node -c scripts/validate-page-evidence.mjs",
|
|
121
|
+
"node -c scripts/test-validate-page-evidence.mjs",
|
|
122
|
+
"node -c scripts/audit-evidence-freshness.mjs",
|
|
123
|
+
"node -c scripts/test-audit-evidence-freshness.mjs",
|
|
124
|
+
"node -c tests/fixtures/consumer-conformance-scenarios.mjs",
|
|
125
|
+
"node -c tests/helpers/render-consumer-conformance.mjs",
|
|
126
|
+
"node -c tests/consumer-conformance.spec.mjs",
|
|
127
|
+
"node -c scripts/test-consumer-conformance-sentinel.mjs",
|
|
128
|
+
"node scripts/validate-consumer-reference.mjs --json",
|
|
129
|
+
"node scripts/test-validate-consumer-reference.mjs --json",
|
|
130
|
+
"node scripts/validate-promotion-rfc.mjs --json",
|
|
131
|
+
"node scripts/test-validate-promotion-rfc.mjs --json",
|
|
132
|
+
"node scripts/test-validate-consumer-conformance.mjs --case valid-runtime-proof --json",
|
|
133
|
+
"node scripts/test-validate-consumer-conformance.mjs --json",
|
|
134
|
+
"node scripts/test-validate-page-evidence.mjs --json",
|
|
135
|
+
"node scripts/test-audit-evidence-freshness.mjs --json",
|
|
136
|
+
`node -e 'JSON.parse(require("fs").readFileSync("consumer-reference/schema/consumer-conformance-record.schema.json"))'`,
|
|
137
|
+
`node -e 'JSON.parse(require("fs").readFileSync("consumer-reference/schema/page-evidence-session.schema.json"))'`,
|
|
138
|
+
`node -e 'JSON.parse(require("fs").readFileSync("consumer-reference/schema/page-evidence-manifest.schema.json"))'`,
|
|
139
|
+
"consumer-reference/schema/promotion-rfc.schema.json",
|
|
140
|
+
"consumer-reference/policies/shared-experimental.json",
|
|
141
|
+
"node scripts/test-consumer-reference-sentinel.mjs",
|
|
142
|
+
"node -c scripts/baseline-schema-parity.mjs",
|
|
143
|
+
"node -c scripts/test-component-state-source-contract.mjs",
|
|
144
|
+
"node scripts/test-component-state-source-contract.mjs",
|
|
145
|
+
"consumer-reference/schema/visual-evidence.schema.json",
|
|
146
|
+
" component-state-evidence:",
|
|
147
|
+
" env:",
|
|
148
|
+
" STATE_EVIDENCE_ROOT: .tmp/consumer-reference-state",
|
|
149
|
+
" SENTINEL_CONTAINER_IMAGE: mcr.microsoft.com/playwright:v1.61.0-noble@sha256:57b65fdc9ceabe0ef613124c7bbe2babcf9362c4d85e382fe3b03604e84b428a",
|
|
150
|
+
" container:",
|
|
151
|
+
" image: mcr.microsoft.com/playwright:v1.61.0-noble@sha256:57b65fdc9ceabe0ef613124c7bbe2babcf9362c4d85e382fe3b03604e84b428a",
|
|
152
|
+
" steps:",
|
|
153
|
+
" - name: Run artifact harness",
|
|
154
|
+
" run: node scripts/test-validate-component-state-artifacts.mjs",
|
|
155
|
+
" - name: Capture evidence",
|
|
156
|
+
" run: |",
|
|
157
|
+
" node scripts/create-component-state-session.mjs \\",
|
|
158
|
+
" --output \"$STATE_EVIDENCE_ROOT/capture-session.json\" \\",
|
|
159
|
+
" --json",
|
|
160
|
+
" STATE_ARTIFACT_DIR=\"$STATE_EVIDENCE_ROOT/runtime\" \\",
|
|
161
|
+
" STATE_SESSION_RECEIPT=\"$STATE_EVIDENCE_ROOT/capture-session.json\" \\",
|
|
162
|
+
" npm run test:component-state:runtime -- --reporter=line",
|
|
163
|
+
" node scripts/finalize-component-state-evidence.mjs \\",
|
|
164
|
+
" --artifact-root \"$STATE_EVIDENCE_ROOT\" \\",
|
|
165
|
+
" --output \"$STATE_EVIDENCE_ROOT/runtime-manifest.json\" \\",
|
|
166
|
+
" --json",
|
|
167
|
+
" node scripts/validate-component-state.mjs \\",
|
|
168
|
+
" --artifact-root \"$STATE_EVIDENCE_ROOT\" \\",
|
|
169
|
+
" --runtime-manifest \"$STATE_EVIDENCE_ROOT/runtime-manifest.json\" \\",
|
|
170
|
+
" --json",
|
|
171
|
+
" - name: Upload evidence",
|
|
172
|
+
" with:",
|
|
173
|
+
" path: ${{ env.STATE_EVIDENCE_ROOT }}/",
|
|
174
|
+
" chromium-sentinel:",
|
|
175
|
+
" steps:",
|
|
176
|
+
" - run: node scripts/test-consumer-reference-sentinel.mjs",
|
|
177
|
+
" chromium-calibration:",
|
|
178
|
+
" consumer-conformance:",
|
|
179
|
+
" name: Consumer conformance Chromium matrix",
|
|
180
|
+
" container:",
|
|
181
|
+
" image: mcr.microsoft.com/playwright:v1.61.0-noble@sha256:57b65fdc9ceabe0ef613124c7bbe2babcf9362c4d85e382fe3b03604e84b428a",
|
|
182
|
+
" steps:",
|
|
183
|
+
" - run: npx playwright test tests/consumer-conformance.spec.mjs --project=chromium --reporter=line",
|
|
184
|
+
" - run: node scripts/test-consumer-conformance-sentinel.mjs --json",
|
|
185
|
+
" consumer-page-evidence:",
|
|
186
|
+
" name: Consumer page-evidence raster capture (nonblocking)",
|
|
187
|
+
" continue-on-error: true",
|
|
188
|
+
" env:",
|
|
189
|
+
" CONSUMER_CONFORMANCE_CAPTURE_DIR: .tmp/consumer-page-evidence",
|
|
190
|
+
" steps:",
|
|
191
|
+
" - run: node scripts/create-page-evidence-session.mjs --json",
|
|
192
|
+
" - run: npx playwright test tests/consumer-conformance.spec.mjs --project=chromium --reporter=line",
|
|
193
|
+
" - run: node scripts/finalize-page-evidence.mjs --json",
|
|
194
|
+
" - run: node scripts/validate-page-evidence.mjs --json",
|
|
195
|
+
" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4",
|
|
196
|
+
" with:",
|
|
197
|
+
" name: consumer-page-evidence-${{ github.run_id }}-${{ github.sha }}",
|
|
198
|
+
" retention-days: 14",
|
|
199
|
+
"node scripts/validate-baseline-manifest.mjs --json",
|
|
200
|
+
"node scripts/test-validate-baseline-manifest.mjs --json",
|
|
201
|
+
"node scripts/test-summarize-sentinel-calibration.mjs",
|
|
202
|
+
"node scripts/validate-renderer-purity.mjs --json",
|
|
203
|
+
"checkout_sha=\"$(git -c safe.directory=\"$GITHUB_WORKSPACE\" rev-parse HEAD)\"",
|
|
204
|
+
"--repository \"changeroa/StyleGallery\" \\",
|
|
205
|
+
"--execution-repository \"$GITHUB_REPOSITORY\" \\",
|
|
206
|
+
"\"repository\":\"%s\",\"execution_repository\":\"%s\"",
|
|
207
|
+
"\"changeroa/StyleGallery\" \"$GITHUB_REPOSITORY\" \"$GITHUB_RUN_ID\"",
|
|
208
|
+
"permissions:",
|
|
209
|
+
" contents: read",
|
|
210
|
+
"",
|
|
211
|
+
].map((line, index, lines) => {
|
|
212
|
+
const commandStart = lines.indexOf("node -c scripts/component-state-workflow-contract.mjs");
|
|
213
|
+
const commandEnd = lines.indexOf("consumer-reference/policies/shared-experimental.json");
|
|
214
|
+
return index >= commandStart && index <= commandEnd ? ` ${line}` : line;
|
|
215
|
+
}).join("\n"),
|
|
216
|
+
".github/workflows/evidence-freshness.yml": [
|
|
217
|
+
"name: Audit explicit evidence deadlines",
|
|
218
|
+
"on:",
|
|
219
|
+
" workflow_dispatch:",
|
|
220
|
+
" schedule:",
|
|
221
|
+
" - cron: '0 5 * * 1'",
|
|
222
|
+
"permissions:",
|
|
223
|
+
" contents: read",
|
|
224
|
+
"jobs:",
|
|
225
|
+
" evidence-freshness:",
|
|
226
|
+
" runs-on: ubuntu-latest",
|
|
227
|
+
" steps:",
|
|
228
|
+
" - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4",
|
|
229
|
+
" with:",
|
|
230
|
+
" persist-credentials: false",
|
|
231
|
+
" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4",
|
|
232
|
+
" - run: npm ci --ignore-scripts --no-audit --no-fund",
|
|
233
|
+
" - run: |",
|
|
234
|
+
" node scripts/audit-evidence-freshness.mjs --record consumer-reference/baselines/calibration.json --as-of \"$as_of\" --mode advisory --json > evidence-freshness-report.json",
|
|
235
|
+
" console.log(`::warning file=${warning.source_path}::${warning.code}: ${warning.message}`);",
|
|
236
|
+
" - if: always()",
|
|
237
|
+
" uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4",
|
|
238
|
+
" with:",
|
|
239
|
+
" name: evidence-freshness-${{ github.run_id }}",
|
|
240
|
+
" path: evidence-freshness-report.json",
|
|
241
|
+
" retention-days: 14",
|
|
242
|
+
"",
|
|
243
|
+
].join("\n"),
|
|
244
|
+
"GOVERNANCE.md": [
|
|
245
|
+
"---",
|
|
246
|
+
"scheduled_stale_audit: deferred",
|
|
247
|
+
"scheduled_evidence_audit: active_advisory",
|
|
248
|
+
"---",
|
|
249
|
+
"",
|
|
250
|
+
"# Governance, Lifecycle, And Docs-As-Code",
|
|
251
|
+
"",
|
|
252
|
+
"| Doc family | Source of truth | Generator | Generated artifacts | Lifecycle state | Stale trigger | Validator | Review owner |",
|
|
253
|
+
"| Root repository guide | `README.md` | Manual | None | `stable` | Source-of-truth route changes, broken root links, or ownership changes. | `scripts/validate-okf.mjs` | Repository governance owner |",
|
|
254
|
+
"| OKF bundle map | `index.md` | Manual | None | `scripts/validate-okf.mjs` | Repository governance owner |",
|
|
255
|
+
"| Agent editing rules | `AGENTS.md` | Manual | None | `scripts/validate-links.mjs` | Repository governance owner |",
|
|
256
|
+
"| Planning guides | `GUIDE.md`, `guides/*.md` | Manual | None | `scripts/validate-okf.mjs` | Planning-doc owner |",
|
|
257
|
+
"| Layout recipes | `recipes/*.md` | Manual | None | `scripts/validate-okf.mjs` | Recipe owner |",
|
|
258
|
+
"| Quality gates and evidence | `quality/**/*.md` | Manual | None | `scripts/validate-okf.mjs` | Quality owner |",
|
|
259
|
+
"| Consumer reference contract | `consumer-reference/contract.md` | Manual | None | `stable` | Receiver changes. | `scripts/validate-consumer-reference.mjs` | Validation owner |",
|
|
260
|
+
"| Governed local reference profiles | `design-engineering/reference-profiles/governed-local/editorial/profile.json`, `design-engineering/reference-profiles/governed-local/editorial/tokens.dtcg.json`, `design-engineering/reference-profiles/governed-local/editorial/local-foundations.json`, `design-engineering/reference-profiles/governed-local/terminal/profile.json`, `design-engineering/reference-profiles/governed-local/terminal/tokens.dtcg.json`, `design-engineering/reference-profiles/governed-local/terminal/local-foundations.json` | Manual | None | `experimental`, `example_only`, non-default related fixtures | Profile source changes. | `scripts/validate-consumer-reference.mjs` | Validation owner |",
|
|
261
|
+
"| Component-state evidence matrices | Each profile's declared `components/*.component.json`, `states/*.states.json`, `fixtures/*.fixture.json`, and `evidence/*.evidence.json` records | `scripts/generate-consumer-reference-evidence.mjs` | `design-engineering/reference-profiles/governed-local/editorial/generated/state-matrix.md`, `design-engineering/reference-profiles/governed-local/editorial/generated/keyboard-matrix.md`, `design-engineering/reference-profiles/governed-local/editorial/generated/evidence-coverage.md`, `design-engineering/reference-profiles/governed-local/terminal/generated/state-matrix.md`, `design-engineering/reference-profiles/governed-local/terminal/generated/keyboard-matrix.md`, `design-engineering/reference-profiles/governed-local/terminal/generated/evidence-coverage.md` | `generated` | Source or generator changes. | `scripts/validate-component-state.mjs` | Validation owner |",
|
|
262
|
+
"| Consumer migration conformance | `consumer-reference/schema/consumer-conformance-record.schema.json`, `design-engineering/consumer-migration-readiness.md` | Manual | Consumer-owned conformance records | `experimental` method | Method, dimension, scenario, mapping, or ownership changes. | `scripts/validate-consumer-conformance.mjs`, `scripts/test-validate-consumer-conformance.mjs` | Design Engineering owner with Validation owner |",
|
|
263
|
+
"| Consumer page-evidence lifecycle | `consumer-reference/schema/page-evidence-session.schema.json`, `consumer-reference/schema/page-evidence-manifest.schema.json` | Browser/session tooling | Consumer-owned session, runner, manifest, and raster artifacts | `experimental` evidence protocol | Source, revision, session, run, scenario, review deadline, or artifact integrity changes. | `scripts/test-validate-page-evidence.mjs`, deterministic Chromium consumer-conformance job | Validation owner with consumer owner |",
|
|
264
|
+
"| Explicit evidence freshness schedule | Evidence records that declare `expires_at` or `review_by` | `.github/workflows/evidence-freshness.yml` | Advisory JSON audit artifact | `stable` narrow schedule | Explicit deadline, auditor, schedule, or inventory changes. | `scripts/audit-evidence-freshness.mjs`, `scripts/test-audit-evidence-freshness.mjs` | Validation owner |",
|
|
265
|
+
"| Deterministic consumer browser conformance | `tests/consumer-conformance.spec.mjs`, `tests/fixtures/consumer-conformance-scenarios.mjs`, `tests/helpers/render-consumer-conformance.mjs` | Playwright `1.61.0` in the digest-pinned `linux/amd64` image | Optional page-evidence raster artifact | `experimental` contract with blocking semantic gate and nonblocking raster capture | Viewport, container, content, state, overlay, page-scale, focus, overflow, contrast, semantics, or runtime-error changes. | Playwright matrix and `scripts/test-consumer-conformance-sentinel.mjs` | Validation owner with Design Engineering owner |",
|
|
266
|
+
"| Shared promotion policy | Promotion policy | Manual | None | stable | Policy changes. | promotion validator | Validation owner |",
|
|
267
|
+
"| Proposed Chromium sentinel | `tests/helpers/render-consumer-reference.mjs`, `consumer-reference/schema/calibration-record.schema.json`, `consumer-reference/baselines/*.json` | Playwright | Snapshot and raw calibration evidence | `experimental` | Renderer or baseline changes. | `scripts/validate-baseline-manifest.mjs` | Validation owner |",
|
|
268
|
+
"| Domain manifest and scope decision | `DOMAINS.md`, `quality/claim-records/stylegallery-multidomain-scope.md` | Manual | None | `stable` | Domain membership, repository-scope, or provenance-policy changes. | `scripts/validate-domains.mjs`, `scripts/validate-governance.mjs` | Repository governance owner |",
|
|
269
|
+
"| Layout domain hub | `layout/index.md` | Manual | None | `stable` | Layout route or ownership changes. | `scripts/validate-domains.mjs`, `scripts/validate-ia.mjs` | Pattern-data owner |",
|
|
270
|
+
"| Motion domain guidance | `motion/*.md` | Manual | None | `experimental` | Upstream revision, evidence boundary, or guidance changes. | `scripts/validate-domains.mjs` | Motion domain owner |",
|
|
271
|
+
"| Design Engineering domain guidance | `design-engineering/*.md` | Manual | None | `experimental` | Upstream revision, evidence boundary, or guidance changes. | `scripts/validate-domains.mjs` | Design Engineering domain owner |",
|
|
272
|
+
"| Game UI domain guidance | `game-ui/**/*.md` | Manual | None | `experimental` | Classification, hierarchy, engine implementation, evidence boundary, or route changes. | `scripts/validate-domains.mjs` | Game UI domain owner |",
|
|
273
|
+
"| Platform Guides domain guidance | `platform-guides/*.md` | Manual | None | `experimental` | Platform version, upstream revision, evidence boundary, or guidance changes. | `scripts/validate-domains.mjs` | Platform Guides domain owner |",
|
|
274
|
+
"| Pattern data and examples | `scripts/pattern-data.mjs` | Manual data source | `patterns/**/*.md` | `generated` output from `stable` source | Source-lineage URL changes, generated drift, category changes, or pattern count changes. | `scripts/validate-patterns.mjs`, `scripts/validate-catalog.mjs`, `scripts/validate-governance.mjs` | Pattern-data owner |",
|
|
275
|
+
"| Pattern generator | `scripts/generate-patterns.mjs` | Manual code source | `patterns/**/*.md` | `stable` generator, `generated` output | Generated structure changes, generated-warning changes, or generated metadata changes. | `node -c scripts/generate-patterns.mjs` | Pattern-data owner |",
|
|
276
|
+
"| Validation scripts | `scripts/validate-*.mjs`, `scripts/test-validate-*.mjs` | Manual code source | CI validation output | `node -c` | Validation owner |",
|
|
277
|
+
"| CI workflow | `.github/workflows/validate.yml` | Manual | GitHub Actions run | GitHub Actions | Repository governance owner |",
|
|
278
|
+
"",
|
|
279
|
+
"## Generated Artifact Policy",
|
|
280
|
+
"Do not hand-edit generated artifacts.",
|
|
281
|
+
"`scripts/pattern-data.mjs`",
|
|
282
|
+
"`scripts/generate-patterns.mjs`",
|
|
283
|
+
"`scripts/generate-consumer-reference-evidence.mjs`",
|
|
284
|
+
"Browser state evidence begins with `scripts/create-component-state-session.mjs`",
|
|
285
|
+
"Receipt creation rejects dirty relevant sources.",
|
|
286
|
+
"browser-authored visual sidecars bind the same session, scenario, capture time, source digest, PNG bytes, dimensions, and hash",
|
|
287
|
+
"exactly 30 channel passes over the closed 40-file runtime set",
|
|
288
|
+
"Validation uses the receipt and completed manifest interval, not a wall-clock maximum age",
|
|
289
|
+
"design-engineering/reference-profiles/governed-local/editorial/generated/state-matrix.md",
|
|
290
|
+
"design-engineering/reference-profiles/governed-local/editorial/generated/keyboard-matrix.md",
|
|
291
|
+
"design-engineering/reference-profiles/governed-local/editorial/generated/evidence-coverage.md",
|
|
292
|
+
"design-engineering/reference-profiles/governed-local/terminal/generated/state-matrix.md",
|
|
293
|
+
"design-engineering/reference-profiles/governed-local/terminal/generated/keyboard-matrix.md",
|
|
294
|
+
"design-engineering/reference-profiles/governed-local/terminal/generated/evidence-coverage.md",
|
|
295
|
+
"",
|
|
296
|
+
"## Lifecycle States",
|
|
297
|
+
"`draft` `stable` `deprecated` `experimental` `generated`",
|
|
298
|
+
"",
|
|
299
|
+
"## Review Ownership",
|
|
300
|
+
"CODEOWNERS",
|
|
301
|
+
"owner.enforcement: \"placeholder\"",
|
|
302
|
+
"review_independence: \"single_account\"",
|
|
303
|
+
"The StyleGallery-local `>=2` independent-consumer gateway applies only to consumer-local → shared-experimental invariant eligibility.",
|
|
304
|
+
"Shared stable has no numeric adoption threshold.",
|
|
305
|
+
"Normative correctness may waive adoption count only.",
|
|
306
|
+
"Synthetic examples have zero durable adopter attestations and record no promotion.",
|
|
307
|
+
"A stable contract must never be silently relabeled shared-experimental.",
|
|
308
|
+
"",
|
|
309
|
+
"## Staleness Control",
|
|
310
|
+
"Decision: run a weekly advisory audit only for evidence records that already declare `expires_at` or `review_by`.",
|
|
311
|
+
"No repository-wide maximum age or inferred time-to-live applies.",
|
|
312
|
+
"Malformed records and auditor failures remain blocking even though due-date findings are advisory.",
|
|
313
|
+
".github/workflows/evidence-freshness.yml",
|
|
314
|
+
"Monday at 05:00 UTC",
|
|
315
|
+
"Audit trigger:",
|
|
316
|
+
"node scripts/validate-links.mjs --json",
|
|
317
|
+
"node scripts/test-consumer-reference-sentinel.mjs",
|
|
318
|
+
...sentinelProvenanceClauses,
|
|
319
|
+
"",
|
|
320
|
+
].join("\n"),
|
|
321
|
+
};
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
export function workflowSafetyCases(workflow) {
|
|
2
|
+
return [
|
|
3
|
+
{
|
|
4
|
+
name: "floating_action_ref",
|
|
5
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4", "uses: actions/checkout@v4") },
|
|
6
|
+
expect: ".github/workflows/validate.yml: floating or unlabeled action ref uses: actions/checkout@v4",
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: "checkout_credentials_persisted",
|
|
10
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" persist-credentials: false\n", "") },
|
|
11
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "mixed_case_checkout_credentials_missing",
|
|
15
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", " - uses: Actions/Checkout@34e114876b0b11c390a56381ad16ebd13914f8d5\n - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4") },
|
|
16
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "mixed_case_checkout_credentials_true",
|
|
20
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", " - uses: Actions/Checkout@34e114876b0b11c390a56381ad16ebd13914f8d5\n with:\n persist-credentials: true\n - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4") },
|
|
21
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "mixed_case_checkout_credentials_false",
|
|
25
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", " - uses: Actions/Checkout@34e114876b0b11c390a56381ad16ebd13914f8d5\n with:\n persist-credentials: false\n - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4") },
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "third_party_floating_action_ref",
|
|
29
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "uses: attacker/action@main") },
|
|
30
|
+
expect: ".github/workflows/validate.yml: floating or unlabeled action ref uses: attacker/action@main",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "docker_action_ref",
|
|
34
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", " - uses: docker://alpine:latest\n - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4") },
|
|
35
|
+
expect: ".github/workflows/validate.yml: docker action refs are forbidden uses: docker://alpine:latest",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "repository_local_action_ref",
|
|
39
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", " - uses: ./.github/actions/local\n - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4") },
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "checkout_true_with_later_env_false",
|
|
43
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" persist-credentials: false\n", " persist-credentials: true\n env:\n persist-credentials: false\n") },
|
|
44
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "checkout_true_with_block_scalar_false",
|
|
48
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" persist-credentials: false\n", " sparse-checkout: |\n persist-credentials: false\n persist-credentials: true\n") },
|
|
49
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "checkout_duplicate_credentials",
|
|
53
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" persist-credentials: false\n", " persist-credentials: false\n persist-credentials: false\n") },
|
|
54
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "extra_top_level_permission",
|
|
58
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" contents: read\n", " contents: read\n issues: read\n") },
|
|
59
|
+
expect: ".github/workflows/validate.yml: top-level permissions must be exactly contents: read",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "write_top_level_permission",
|
|
63
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" contents: read\n", " contents: write\n") },
|
|
64
|
+
expect: ".github/workflows/validate.yml: top-level permissions must be exactly contents: read",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "job_level_permission_override",
|
|
68
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" validate:\n", " validate:\n permissions:\n contents: read\n") },
|
|
69
|
+
expect: ".github/workflows/validate.yml: job-level permissions overrides are forbidden",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: "single_quoted_third_party_floating_action_ref",
|
|
73
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "'uses': attacker/action@main") },
|
|
74
|
+
expect: ".github/workflows/validate.yml: floating or unlabeled action ref 'uses': attacker/action@main",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "double_quoted_third_party_floating_action_ref",
|
|
78
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "\"uses\": attacker/action@main") },
|
|
79
|
+
expect: ".github/workflows/validate.yml: floating or unlabeled action ref \"uses\": attacker/action@main",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "single_quoted_checkout_floating_ref",
|
|
83
|
+
mutate: { ".github/workflows/validate.yml": quotedCheckout(workflow, "'") },
|
|
84
|
+
expect: ".github/workflows/validate.yml: floating or unlabeled action ref 'uses': actions/checkout@v4",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "single_quoted_checkout_credentials_persisted",
|
|
88
|
+
mutate: { ".github/workflows/validate.yml": quotedCheckout(workflow, "'") },
|
|
89
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "double_quoted_checkout_floating_ref",
|
|
93
|
+
mutate: { ".github/workflows/validate.yml": quotedCheckout(workflow, "\"") },
|
|
94
|
+
expect: ".github/workflows/validate.yml: floating or unlabeled action ref \"uses\": actions/checkout@v4",
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "double_quoted_checkout_credentials_persisted",
|
|
98
|
+
mutate: { ".github/workflows/validate.yml": quotedCheckout(workflow, "\"") },
|
|
99
|
+
expect: ".github/workflows/validate.yml: every actions/checkout step must set persist-credentials: false",
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "single_quoted_job_level_permission_override",
|
|
103
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" validate:\n", " validate:\n 'permissions':\n contents: read\n") },
|
|
104
|
+
expect: ".github/workflows/validate.yml: job-level permissions overrides are forbidden",
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "double_quoted_job_level_permission_override",
|
|
108
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" validate:\n", " validate:\n \"permissions\":\n contents: read\n") },
|
|
109
|
+
expect: ".github/workflows/validate.yml: job-level permissions overrides are forbidden",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "flow_sequence_action_mapping",
|
|
113
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "- { uses: attacker/action@main }") },
|
|
114
|
+
expect: ".github/workflows/validate.yml: flow-style sequence mappings are forbidden",
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: "flow_sequence_checkout_with_inline_map",
|
|
118
|
+
mutate: { ".github/workflows/validate.yml": flowCheckout(workflow) },
|
|
119
|
+
expect: ".github/workflows/validate.yml: flow-style sequence mappings are forbidden",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: "flow_collection_mapping_value",
|
|
123
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" steps:\n", " steps: [{ uses: attacker/action@main }]\n") },
|
|
124
|
+
expect: ".github/workflows/validate.yml: flow-style collection values are forbidden",
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "flow_collection_continuation_value",
|
|
128
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" steps:\n", " steps:\n [{ uses: attacker/action@main }]\n") },
|
|
129
|
+
expect: ".github/workflows/validate.yml: flow-style collection values are forbidden",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "double_quoted_escaped_action_key",
|
|
133
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "\"u\\u0073es\": attacker/action@main") },
|
|
134
|
+
expect: ".github/workflows/validate.yml: escape sequences in double-quoted mapping keys are forbidden",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: "double_quoted_escaped_permission_key",
|
|
138
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" validate:\n", " validate:\n \"permi\\u0073sions\":\n contents: write\n") },
|
|
139
|
+
expect: ".github/workflows/validate.yml: escape sequences in double-quoted mapping keys are forbidden",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: "explicit_action_mapping_key",
|
|
143
|
+
mutate: { ".github/workflows/validate.yml": replaceSetupNode(workflow, " ? uses\n : attacker/action@main") },
|
|
144
|
+
expect: ".github/workflows/validate.yml: explicit mapping keys are forbidden",
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "explicit_checkout_mapping_key",
|
|
148
|
+
mutate: { ".github/workflows/validate.yml": replaceCheckout(workflow, " - ? uses\n : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5\n with:\n persist-credentials: true") },
|
|
149
|
+
expect: ".github/workflows/validate.yml: explicit mapping keys are forbidden",
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: "explicit_permissions_mapping_key",
|
|
153
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("permissions:\n contents: read", "? permissions\n:\n contents: write") },
|
|
154
|
+
expect: ".github/workflows/validate.yml: explicit mapping keys are forbidden",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: "explicit_duplicate_checkout_credentials_key",
|
|
158
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" persist-credentials: false\n", " ? persist-credentials\n : false\n persist-credentials: true\n") },
|
|
159
|
+
expect: ".github/workflows/validate.yml: explicit mapping keys are forbidden",
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: "tagged_action_key",
|
|
163
|
+
mutate: { ".github/workflows/validate.yml": replaceCheckout(workflow, " - name: Checkout\n !!str uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5") },
|
|
164
|
+
expect: ".github/workflows/validate.yml: YAML tags are forbidden",
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: "anchored_action_key",
|
|
168
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "&name uses: attacker/action@main") },
|
|
169
|
+
expect: ".github/workflows/validate.yml: YAML anchors and aliases are forbidden",
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: "aliased_action_value",
|
|
173
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("name: Validate StyleGallery", "x-action: &action attacker/action@main\nname: Validate StyleGallery").replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "uses: *action") },
|
|
174
|
+
expect: ".github/workflows/validate.yml: YAML anchors and aliases are forbidden",
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
name: "merged_checkout_step",
|
|
178
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("name: Validate StyleGallery", "x-checkout: &checkout\n uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5\n with:\n persist-credentials: false\nname: Validate StyleGallery").replace(" with:\n persist-credentials: false", " <<: *checkout\n with:\n persist-credentials: true") },
|
|
179
|
+
expect: ".github/workflows/validate.yml: YAML merge keys are forbidden",
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: "literal_block_scalar_action_ref",
|
|
183
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace("uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4", "uses: |-\n attacker/action@main") },
|
|
184
|
+
expect: ".github/workflows/validate.yml: block scalar action refs are forbidden",
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "folded_block_scalar_checkout_ref",
|
|
188
|
+
mutate: { ".github/workflows/validate.yml": replaceCheckout(workflow, " - name: Checkout\n uses: >-\n actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5\n with:\n persist-credentials: true") },
|
|
189
|
+
expect: ".github/workflows/validate.yml: block scalar action refs are forbidden",
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: "yaml_directive",
|
|
193
|
+
mutate: { ".github/workflows/validate.yml": `%YAML 1.2\n---\n${workflow}` },
|
|
194
|
+
expect: ".github/workflows/validate.yml: YAML directives are forbidden",
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: "yaml_tag_directive",
|
|
198
|
+
mutate: { ".github/workflows/validate.yml": `%TAG !e! tag:example.com,2026:\n---\n${workflow}` },
|
|
199
|
+
expect: ".github/workflows/validate.yml: YAML directives are forbidden",
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: "yaml_document_start_marker",
|
|
203
|
+
mutate: { ".github/workflows/validate.yml": `---\n${workflow}` },
|
|
204
|
+
expect: ".github/workflows/validate.yml: YAML document markers are forbidden",
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: "yaml_document_end_marker",
|
|
208
|
+
mutate: { ".github/workflows/validate.yml": `${workflow}\n...\n` },
|
|
209
|
+
expect: ".github/workflows/validate.yml: YAML document markers are forbidden",
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: "block_scalar_body_structural_notation_ignored",
|
|
213
|
+
mutate: { ".github/workflows/validate.yml": workflow.replace(" run: |\n node scripts/create-component-state-session.mjs", " run: |\n ? uses\n : attacker/action@main\n !!str uses: attacker/action@main\n &action uses: attacker/action@main\n <<: *action\n uses: |\n attacker/action@main\n steps: [{ uses: attacker/action@main }]\n ---\n node scripts/create-component-state-session.mjs") },
|
|
214
|
+
},
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function quotedCheckout(workflow, quote) {
|
|
219
|
+
return workflow
|
|
220
|
+
.replace("uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4", `${quote}uses${quote}: actions/checkout@v4`)
|
|
221
|
+
.replace(" with:\n persist-credentials: false", ` ${quote}with${quote}:\n ${quote}persist-credentials${quote}: true`);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function flowCheckout(workflow) {
|
|
225
|
+
return replaceCheckout(
|
|
226
|
+
workflow,
|
|
227
|
+
" - { uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5, with: { persist-credentials: false } }",
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function replaceCheckout(workflow, replacement) {
|
|
232
|
+
const named = " - name: Checkout\n uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4\n with:\n persist-credentials: false";
|
|
233
|
+
const unnamed = " - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4\n with:\n persist-credentials: false";
|
|
234
|
+
return workflow.includes(named) ? workflow.replace(named, replacement) : workflow.replace(unnamed, replacement);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function replaceSetupNode(workflow, replacement) {
|
|
238
|
+
const named = " - name: Setup Node\n uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4";
|
|
239
|
+
const unnamed = " - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4";
|
|
240
|
+
return workflow.includes(named) ? workflow.replace(named, ` - name: Setup Node\n${replacement}`) : workflow.replace(unnamed, ` - ${replacement.trimStart()}`);
|
|
241
|
+
}
|