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,218 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { patterns, samples } from "./pattern-data.mjs";
|
|
6
|
+
|
|
7
|
+
const root = process.cwd();
|
|
8
|
+
const patternsDir = path.join(root, "patterns");
|
|
9
|
+
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. -->";
|
|
10
|
+
|
|
11
|
+
function rule(selector, declarations) {
|
|
12
|
+
const body = Object.entries(declarations)
|
|
13
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
14
|
+
.map(([property, value]) => ` ${property}: ${value};`)
|
|
15
|
+
.join("\n");
|
|
16
|
+
return `${selector} {\n${body}\n}`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function sampleHtml(slug) {
|
|
20
|
+
const html = samples[slug];
|
|
21
|
+
if (!html) throw new Error(`missing sample HTML for ${slug}`);
|
|
22
|
+
return html.trim();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function slugDir(category) {
|
|
26
|
+
return category.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function normalize(raw) {
|
|
30
|
+
const [slug, category, problem, axis, responsiveness, source, rawRules, scrollOwnership] = raw;
|
|
31
|
+
const css = rawRules.map(([selector, declarations]) => rule(selector, declarations)).join("\n\n");
|
|
32
|
+
return { axis, category, css, problem, responsiveness, rules: rawRules, scrollOwnership, slug, source };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function declarationNames(pattern) {
|
|
36
|
+
return [...new Set(pattern.rules.flatMap(([, declarations]) => Object.keys(declarations)))];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function inlineCodeList(values) {
|
|
40
|
+
return values.map((value) => `\`${value}\``).join(", ");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function cognitiveRisk(pattern) {
|
|
44
|
+
if (pattern.scrollOwnership && !pattern.scrollOwnership.startsWith("No internal")) {
|
|
45
|
+
return "Medium: scroll ownership can hide context, controls, or return points if it is not named in the consuming layout.";
|
|
46
|
+
}
|
|
47
|
+
if (pattern.responsiveness === "reflow") {
|
|
48
|
+
return "Medium: reflow can change spatial adjacency, so labels, controls, and related content must remain adjacent in DOM order.";
|
|
49
|
+
}
|
|
50
|
+
return "Low: the pattern should preserve ordinary reading flow when semantic order is already correct.";
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function contractSections(pattern, rootClass) {
|
|
54
|
+
const properties = declarationNames(pattern);
|
|
55
|
+
const core = inlineCodeList(properties);
|
|
56
|
+
return [
|
|
57
|
+
"## Core Properties",
|
|
58
|
+
"",
|
|
59
|
+
`- ${core} define the spatial behavior for this pattern.`,
|
|
60
|
+
"",
|
|
61
|
+
"## Properties That Break The Layout If Removed",
|
|
62
|
+
"",
|
|
63
|
+
`- Removing ${core} changes the pattern from its documented layout responsibility back toward ordinary flow or an unsafe fixed arrangement.`,
|
|
64
|
+
"",
|
|
65
|
+
"## Constraints And Change Points",
|
|
66
|
+
"",
|
|
67
|
+
`- ${pattern.responsiveness} responsiveness is part of the contract; change sizing values only when the new minimum, maximum, or wrap point is documented with the pattern.`,
|
|
68
|
+
"- Keep the HTML class hooks and CSS selectors in one-to-one agreement.",
|
|
69
|
+
"",
|
|
70
|
+
"## Scroll Ownership",
|
|
71
|
+
"",
|
|
72
|
+
pattern.scrollOwnership ?? "No internal scroll container.",
|
|
73
|
+
"",
|
|
74
|
+
"## Accessibility And Source Order Notes",
|
|
75
|
+
"",
|
|
76
|
+
"- Semantic role expectation: Preserve the HTML sample's landmark, list, navigation, form, figure, or article roles; layout classes must not replace semantic elements.",
|
|
77
|
+
"- DOM order expectation: Keep semantic elements, DOM order, reading order, and focus order independent from the visual placement created by the layout classes.",
|
|
78
|
+
"- Focus risk: Any interactive descendants follow DOM order; do not use this pattern to create a visual order that keyboard focus cannot follow.",
|
|
79
|
+
`- Scroll expectation: ${pattern.scrollOwnership ?? "No internal scroll container."}`,
|
|
80
|
+
`- Cognitive risk: ${cognitiveRisk(pattern)}`,
|
|
81
|
+
"",
|
|
82
|
+
"## Browser And Fallback Notes",
|
|
83
|
+
"",
|
|
84
|
+
"The CSS uses modern grid, flex, intrinsic sizing, logical properties, or positioning. If a target browser cannot support a property, fall back to ordinary block flow before adding decorative or script-driven layout behavior.",
|
|
85
|
+
"",
|
|
86
|
+
"## Composition Notes",
|
|
87
|
+
"",
|
|
88
|
+
`Use \`${rootClass}\` as the stable pattern root and compose additional layout behavior outside that root unless the child class is part of the documented relationship.`,
|
|
89
|
+
"",
|
|
90
|
+
"## Anti-patterns",
|
|
91
|
+
"",
|
|
92
|
+
"- Do not add color, border, shadow, typography, or animation rules to reusable pattern CSS.",
|
|
93
|
+
"- Do not use this pattern to repair unclear HTML structure; make the DOM roles legible first.",
|
|
94
|
+
"",
|
|
95
|
+
"## IA Navigation",
|
|
96
|
+
"",
|
|
97
|
+
`Parent: [${pattern.category} patterns](index.md) in [Pattern Categories](../index.md).`,
|
|
98
|
+
"Next: [Layout Recipes](../../recipes/index.md) for screen-level composition, or return to the [Layout Pattern Catalog](../../CATALOG.md) when choosing another primitive.",
|
|
99
|
+
"",
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function render(raw) {
|
|
104
|
+
const pattern = normalize(raw);
|
|
105
|
+
const rootClass = pattern.slug.replaceAll("-", "_");
|
|
106
|
+
const html = sampleHtml(pattern.slug);
|
|
107
|
+
return [
|
|
108
|
+
"---",
|
|
109
|
+
"type: Layout Pattern",
|
|
110
|
+
`name: ${pattern.slug}`,
|
|
111
|
+
`title: ${pattern.slug}`,
|
|
112
|
+
`category: ${pattern.category}`,
|
|
113
|
+
`description: ${pattern.problem}`,
|
|
114
|
+
`primary_spatial_problem: ${pattern.problem}`,
|
|
115
|
+
"secondary_spatial_problems: none",
|
|
116
|
+
`layout_axis: ${pattern.axis}`,
|
|
117
|
+
"content_shape: mixed",
|
|
118
|
+
`responsiveness: ${pattern.responsiveness}`,
|
|
119
|
+
"constraints: Uses only local class hooks and explicit layout constraints.",
|
|
120
|
+
`scroll_ownership: ${pattern.scrollOwnership ?? "No internal scroll container."}`,
|
|
121
|
+
`source_lineage: ${pattern.source}`,
|
|
122
|
+
"lifecycle: generated",
|
|
123
|
+
"generated_from: scripts/generate-patterns.mjs, scripts/pattern-data.mjs",
|
|
124
|
+
"---",
|
|
125
|
+
"",
|
|
126
|
+
generatedWarning,
|
|
127
|
+
"",
|
|
128
|
+
`# ${pattern.slug}`,
|
|
129
|
+
"",
|
|
130
|
+
"## When To Use",
|
|
131
|
+
"",
|
|
132
|
+
`Use this pattern when you need to ${pattern.problem.charAt(0).toLowerCase()}${pattern.problem.slice(1)}`,
|
|
133
|
+
"",
|
|
134
|
+
"## HTML",
|
|
135
|
+
"",
|
|
136
|
+
"```html",
|
|
137
|
+
html,
|
|
138
|
+
"```",
|
|
139
|
+
"",
|
|
140
|
+
"## CSS",
|
|
141
|
+
"",
|
|
142
|
+
"```css",
|
|
143
|
+
pattern.css,
|
|
144
|
+
"```",
|
|
145
|
+
"",
|
|
146
|
+
...contractSections(pattern, rootClass),
|
|
147
|
+
].join("\n");
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
fs.rmSync(patternsDir, { force: true, recursive: true });
|
|
151
|
+
for (const pattern of patterns) {
|
|
152
|
+
const [slug, category] = pattern;
|
|
153
|
+
const dir = path.join(patternsDir, slugDir(category));
|
|
154
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
155
|
+
fs.writeFileSync(path.join(dir, `${slug}.md`), render(pattern));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
for (const category of [...new Set(patterns.map(([, category]) => category))]) {
|
|
159
|
+
const categoryPatterns = patterns.filter(([, patternCategory]) => patternCategory === category);
|
|
160
|
+
const dir = path.join(patternsDir, slugDir(category));
|
|
161
|
+
fs.writeFileSync(
|
|
162
|
+
path.join(dir, "index.md"),
|
|
163
|
+
[
|
|
164
|
+
`# ${category}`,
|
|
165
|
+
"",
|
|
166
|
+
generatedWarning,
|
|
167
|
+
"",
|
|
168
|
+
...categoryPatterns.map(([slug, , problem]) => `- [${slug}](${slug}.md) - ${problem}`),
|
|
169
|
+
"",
|
|
170
|
+
].join("\n"),
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
fs.writeFileSync(
|
|
175
|
+
path.join(patternsDir, "index.md"),
|
|
176
|
+
[
|
|
177
|
+
"# Pattern Categories",
|
|
178
|
+
"",
|
|
179
|
+
generatedWarning,
|
|
180
|
+
"",
|
|
181
|
+
...[...new Set(patterns.map(([, category]) => category))]
|
|
182
|
+
.map((category) => `- [${category}](${slugDir(category)}/index.md)`),
|
|
183
|
+
"",
|
|
184
|
+
].join("\n"),
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
fs.writeFileSync(
|
|
188
|
+
path.join(root, "CATALOG.md"),
|
|
189
|
+
[
|
|
190
|
+
"---",
|
|
191
|
+
"type: Catalog",
|
|
192
|
+
"title: Layout Pattern Catalog",
|
|
193
|
+
"description: Generated index of layout-gallery patterns.",
|
|
194
|
+
"---",
|
|
195
|
+
"",
|
|
196
|
+
"# Layout Pattern Catalog",
|
|
197
|
+
"",
|
|
198
|
+
"Primary role: pattern lookup.",
|
|
199
|
+
"",
|
|
200
|
+
generatedWarning,
|
|
201
|
+
"",
|
|
202
|
+
"Generated from `scripts/generate-patterns.mjs` and `scripts/pattern-data.mjs`.",
|
|
203
|
+
"",
|
|
204
|
+
"## Planning Layer",
|
|
205
|
+
"",
|
|
206
|
+
"- [Layout Planning Guide](GUIDE.md) - Pre-design entry point for choosing and composing patterns.",
|
|
207
|
+
"- [Decision Tree](guides/decision-tree.md) - Question-driven route from screen constraints to pattern categories.",
|
|
208
|
+
"- [Layout Brief](guides/layout-brief.md) - Questions to answer before selecting a pattern stack.",
|
|
209
|
+
"- [Layout Recipes](recipes/index.md) - Screen-level compositions built from reusable patterns.",
|
|
210
|
+
"",
|
|
211
|
+
"## Patterns",
|
|
212
|
+
"",
|
|
213
|
+
...patterns.map(([slug, category, problem]) => `- [${slug}](patterns/${slugDir(category)}/${slug}.md) - ${category}: ${problem}`),
|
|
214
|
+
"",
|
|
215
|
+
].join("\n"),
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
console.log(`generated ${patterns.length} patterns`);
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const governedProfileSources = [
|
|
2
|
+
"design-engineering/reference-profiles/governed-local/editorial/profile.json",
|
|
3
|
+
"design-engineering/reference-profiles/governed-local/editorial/tokens.dtcg.json",
|
|
4
|
+
"design-engineering/reference-profiles/governed-local/editorial/local-foundations.json",
|
|
5
|
+
"design-engineering/reference-profiles/governed-local/terminal/profile.json",
|
|
6
|
+
"design-engineering/reference-profiles/governed-local/terminal/tokens.dtcg.json",
|
|
7
|
+
"design-engineering/reference-profiles/governed-local/terminal/local-foundations.json",
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
const componentStateSources = ["components/*.component.json", "states/*.states.json", "fixtures/*.fixture.json", "evidence/*.evidence.json"];
|
|
11
|
+
const componentStateArtifacts = ["editorial", "terminal"].flatMap((profile) =>
|
|
12
|
+
["state-matrix.md", "keyboard-matrix.md", "evidence-coverage.md"].map(
|
|
13
|
+
(artifact) => `design-engineering/reference-profiles/governed-local/${profile}/generated/${artifact}`,
|
|
14
|
+
),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
function matrixRows(governance, family) {
|
|
18
|
+
return governance
|
|
19
|
+
.split("\n")
|
|
20
|
+
.filter((candidate) => /^ {0,3}\|/.test(candidate) && candidate.trimStart().startsWith(`| ${family} |`))
|
|
21
|
+
.map((line) => line.split("|").slice(1, -1).map((cell) => cell.trim()));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function codeListValues(cell, finalAnd) {
|
|
25
|
+
if (typeof cell !== "string" || cell.length === 0) return null;
|
|
26
|
+
const parts = cell.split(", ");
|
|
27
|
+
if (finalAnd) {
|
|
28
|
+
const last = parts.at(-1);
|
|
29
|
+
if (parts.length < 2 || !last?.startsWith("and ")) return null;
|
|
30
|
+
parts[parts.length - 1] = last.slice(4);
|
|
31
|
+
} else if (parts.some((part) => part.startsWith("and "))) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const actual = [];
|
|
35
|
+
for (const part of parts) {
|
|
36
|
+
const match = part.match(/^`([^`]+)`$/);
|
|
37
|
+
if (!match) return null;
|
|
38
|
+
actual.push(match[1]);
|
|
39
|
+
}
|
|
40
|
+
return actual;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function hasExpectedValues(actual, expected) {
|
|
44
|
+
if (!actual) return false;
|
|
45
|
+
return actual.length === expected.length && new Set(actual).size === expected.length && expected.every((value) => actual.includes(value));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function referenceOwnershipFailures(governance) {
|
|
49
|
+
const failures = [];
|
|
50
|
+
const profileRows = matrixRows(governance, "Governed local reference profiles");
|
|
51
|
+
if (profileRows.length !== 1) {
|
|
52
|
+
failures.push("GOVERNANCE.md: Governed local reference profiles row must appear exactly once");
|
|
53
|
+
} else {
|
|
54
|
+
const profileRow = profileRows[0];
|
|
55
|
+
if (!hasExpectedValues(codeListValues(profileRow[1], false), governedProfileSources)) failures.push("GOVERNANCE.md: governed local reference profile sources must be the six explicit canonical profile files");
|
|
56
|
+
if (profileRow[2] !== "Manual" || profileRow[3] !== "None") failures.push("GOVERNANCE.md: governed local reference profiles must be manual sources with no generated artifacts");
|
|
57
|
+
}
|
|
58
|
+
const stateRows = matrixRows(governance, "Component-state evidence matrices");
|
|
59
|
+
if (stateRows.length !== 1) {
|
|
60
|
+
failures.push("GOVERNANCE.md: Component-state evidence matrices row must appear exactly once");
|
|
61
|
+
} else {
|
|
62
|
+
const stateRow = stateRows[0];
|
|
63
|
+
const sourceCell = stateRow[1];
|
|
64
|
+
const sourcePrefix = "Each profile's declared ";
|
|
65
|
+
const sourceSuffix = " records";
|
|
66
|
+
const sourceValues = sourceCell?.startsWith(sourcePrefix) && sourceCell.endsWith(sourceSuffix)
|
|
67
|
+
? codeListValues(sourceCell.slice(sourcePrefix.length, -sourceSuffix.length), true)
|
|
68
|
+
: null;
|
|
69
|
+
if (!hasExpectedValues(sourceValues, componentStateSources)) failures.push("GOVERNANCE.md: component-state evidence sources must be the four declared record families");
|
|
70
|
+
if (!hasExpectedValues(codeListValues(stateRow[3], false), componentStateArtifacts)) failures.push("GOVERNANCE.md: component-state generated artifacts must be the six declared matrices");
|
|
71
|
+
}
|
|
72
|
+
return failures;
|
|
73
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
function matrixRow(governance, family) {
|
|
2
|
+
return governance.split("\n").find((line) => line.startsWith(`| ${family} |`));
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function duplicateRow(governance, row, replacement = row) {
|
|
6
|
+
return governance.replace(row, `${row}\n${replacement}`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function mutateCell(row, index, mutate) {
|
|
10
|
+
const cells = row.split("|");
|
|
11
|
+
cells[index] = ` ${mutate(cells[index].trim())} `;
|
|
12
|
+
return cells.join("|");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function reverseCodeValues(cell) {
|
|
16
|
+
const values = [...cell.matchAll(/`([^`]+)`/g)].map((match) => match[1]).reverse();
|
|
17
|
+
return values.map((value) => `\`${value}\``).join(", ");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function governanceMatrixCases(governance) {
|
|
21
|
+
const profileRow = matrixRow(governance, "Governed local reference profiles");
|
|
22
|
+
const stateRow = matrixRow(governance, "Component-state evidence matrices");
|
|
23
|
+
if (!profileRow || !stateRow) throw new Error("canonical governance fixture must contain both reference ownership rows");
|
|
24
|
+
|
|
25
|
+
const conflictingProfileRow = profileRow.replace(
|
|
26
|
+
"`design-engineering/reference-profiles/governed-local/editorial/profile.json`",
|
|
27
|
+
"`design-engineering/reference-profiles/governed-local/**`",
|
|
28
|
+
);
|
|
29
|
+
const reorderedProfileRow = mutateCell(profileRow, 2, reverseCodeValues);
|
|
30
|
+
const reorderedStateSources = mutateCell(stateRow, 2, (cell) => {
|
|
31
|
+
const values = reverseCodeValues(cell);
|
|
32
|
+
return `Each profile's declared ${values.replace(/, ([^,]+)$/, ", and $1")} records`;
|
|
33
|
+
});
|
|
34
|
+
const reorderedStateRow = mutateCell(reorderedStateSources, 4, reverseCodeValues);
|
|
35
|
+
|
|
36
|
+
return [
|
|
37
|
+
{
|
|
38
|
+
name: "duplicate_governed_profile_row",
|
|
39
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, profileRow) },
|
|
40
|
+
expect: "GOVERNANCE.md: Governed local reference profiles row must appear exactly once",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "conflicting_duplicate_governed_profile_row",
|
|
44
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, profileRow, conflictingProfileRow) },
|
|
45
|
+
expect: "GOVERNANCE.md: Governed local reference profiles row must appear exactly once",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "one_space_duplicate_governed_profile_row",
|
|
49
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, profileRow, ` ${profileRow}`) },
|
|
50
|
+
expect: "GOVERNANCE.md: Governed local reference profiles row must appear exactly once",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "three_space_conflicting_governed_profile_row",
|
|
54
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, profileRow, ` ${conflictingProfileRow}`) },
|
|
55
|
+
expect: "GOVERNANCE.md: Governed local reference profiles row must appear exactly once",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "duplicate_component_state_row",
|
|
59
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, stateRow) },
|
|
60
|
+
expect: "GOVERNANCE.md: Component-state evidence matrices row must appear exactly once",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: "one_space_duplicate_component_state_row",
|
|
64
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, stateRow, ` ${stateRow}`) },
|
|
65
|
+
expect: "GOVERNANCE.md: Component-state evidence matrices row must appear exactly once",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "three_space_conflicting_component_state_row",
|
|
69
|
+
mutate: { "GOVERNANCE.md": duplicateRow(governance, stateRow, ` ${mutateCell(stateRow, 2, () => "Each profile's declared `components/**` records")}`) },
|
|
70
|
+
expect: "GOVERNANCE.md: Component-state evidence matrices row must appear exactly once",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: "duplicate_both_reference_rows",
|
|
74
|
+
mutate: { "GOVERNANCE.md": duplicateRow(duplicateRow(governance, profileRow), stateRow) },
|
|
75
|
+
expect: "GOVERNANCE.md: Governed local reference profiles row must appear exactly once",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "four_space_reference_rows_are_code_blocks",
|
|
79
|
+
mutate: {
|
|
80
|
+
"GOVERNANCE.md": duplicateRow(
|
|
81
|
+
duplicateRow(governance, profileRow, ` ${conflictingProfileRow}`),
|
|
82
|
+
stateRow,
|
|
83
|
+
` ${mutateCell(stateRow, 2, () => "Each profile's declared `components/**` records")}`,
|
|
84
|
+
),
|
|
85
|
+
},
|
|
86
|
+
expect: null,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "profile_source_extra_prose",
|
|
90
|
+
mutate: { "GOVERNANCE.md": governance.replace(profileRow, mutateCell(profileRow, 2, (cell) => `${cell} plus every generated matrix and evidence receipt`)) },
|
|
91
|
+
expect: "GOVERNANCE.md: governed local reference profile sources must be the six explicit canonical profile files",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "profile_artifact_extra_prose",
|
|
95
|
+
mutate: { "GOVERNANCE.md": governance.replace(profileRow, mutateCell(profileRow, 4, (cell) => `${cell} plus every generated matrix`)) },
|
|
96
|
+
expect: "GOVERNANCE.md: governed local reference profiles must be manual sources with no generated artifacts",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "component_source_extra_prose",
|
|
100
|
+
mutate: { "GOVERNANCE.md": governance.replace(stateRow, mutateCell(stateRow, 2, (cell) => `${cell} plus every related record`)) },
|
|
101
|
+
expect: "GOVERNANCE.md: component-state evidence sources must be the four declared record families",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: "component_artifact_extra_prose",
|
|
105
|
+
mutate: { "GOVERNANCE.md": governance.replace(stateRow, mutateCell(stateRow, 4, (cell) => `${cell} plus every generated matrix and evidence receipt`)) },
|
|
106
|
+
expect: "GOVERNANCE.md: component-state generated artifacts must be the six declared matrices",
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: "reordered_reference_matrix_cells",
|
|
110
|
+
mutate: { "GOVERNANCE.md": governance.replace(profileRow, reorderedProfileRow).replace(stateRow, reorderedStateRow) },
|
|
111
|
+
expect: null,
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const sentinelProvenanceClauses = [
|
|
2
|
+
"Completed-CI repository, workflow, run ID and attempt, SHA, and artifact-name fields are workflow-recorded, self-asserted metadata, not an external attestation.",
|
|
3
|
+
"The self-asserted repository field names the canonical upstream changeroa/StyleGallery; the self-asserted execution_repository field names the actual GitHub Actions repository and is limited to changeroa/StyleGallery or ark-jo/StyleGallery.",
|
|
4
|
+
"The committed calibration's external_verification object records an independently checked GitHub Actions run and artifact API identity; artifact.api_digest is distinct from committed_ci.raw_evidence_sha256.",
|
|
5
|
+
"Future CI aggregates remain awaiting_external_verification until their uploaded artifact API identity is independently checked.",
|
|
6
|
+
"Linux/amd64 repeatability is externally verified only for committed run 29260372260; it does not establish baseline-owner approval or product suitability.",
|
|
7
|
+
"Baseline-owner approval remains unclaimed until the named owner explicitly approves it.",
|
|
8
|
+
"Synthetic fixtures validate rejection and acceptance behavior only; they are not authenticated provenance.",
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
export const requiredCodeowners = [
|
|
12
|
+
"* @changeroa",
|
|
13
|
+
"/GOVERNANCE.md @changeroa",
|
|
14
|
+
"/README.md @changeroa",
|
|
15
|
+
"/index.md @changeroa",
|
|
16
|
+
"/AGENTS.md @changeroa",
|
|
17
|
+
"/DOMAINS.md @changeroa",
|
|
18
|
+
"/layout/ @changeroa",
|
|
19
|
+
"/motion/ @changeroa",
|
|
20
|
+
"/design-engineering/ @changeroa",
|
|
21
|
+
"/game-ui/ @changeroa",
|
|
22
|
+
"/platform-guides/ @changeroa",
|
|
23
|
+
"/consumer-reference/ @changeroa",
|
|
24
|
+
"/consumer-reference/baselines/ @changeroa",
|
|
25
|
+
"/consumer-reference/policies/ @changeroa",
|
|
26
|
+
"/consumer-reference/fixtures/promotion/ @changeroa",
|
|
27
|
+
"/consumer-reference/schema/promotion-rfc.schema.json @changeroa",
|
|
28
|
+
"/tests/ @changeroa",
|
|
29
|
+
"/playwright.config.mjs @changeroa",
|
|
30
|
+
"/GUIDE.md @changeroa",
|
|
31
|
+
"/guides/ @changeroa",
|
|
32
|
+
"/recipes/ @changeroa",
|
|
33
|
+
"/quality/ @changeroa",
|
|
34
|
+
"/scripts/pattern-data.mjs @changeroa",
|
|
35
|
+
"/scripts/generate-patterns.mjs @changeroa",
|
|
36
|
+
"/patterns/ @changeroa",
|
|
37
|
+
"/CATALOG.md @changeroa",
|
|
38
|
+
"/.github/workflows/validate.yml @changeroa",
|
|
39
|
+
"/.github/ @changeroa",
|
|
40
|
+
"/scripts/ @changeroa",
|
|
41
|
+
"/scripts/validate-*.mjs @changeroa",
|
|
42
|
+
"/scripts/test-validate-*.mjs @changeroa",
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
export const immutableActionPins = [
|
|
46
|
+
"uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4",
|
|
47
|
+
"uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4",
|
|
48
|
+
"uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4",
|
|
49
|
+
];
|