stylegallery 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/DOMAINS.md +2 -6
- package/GOVERNANCE.md +10 -9
- package/README.md +29 -127
- package/consumer-reference/agent-native/v2/admission-policy.json +646 -0
- package/consumer-reference/agent-native/v2/material-registry.json +1 -0
- package/consumer-reference/agent-native/v2/schema/admission-policy.schema.json +50 -0
- package/consumer-reference/agent-native/v2/schema/material-manifest.schema.json +17 -0
- package/consumer-reference/agent-native/v2/schema/material-record.schema.json +20 -0
- package/consumer-reference/contract.md +1 -1
- package/consumer-reference/index.md +5 -3
- package/layout/index.md +124 -0
- package/log.md +57 -0
- package/package.json +183 -22
- package/scripts/agent-native/v2/experimental-extension-registry.mjs +143 -0
- package/scripts/agent-native/v2/extensions/a2a-projection.mjs +264 -0
- package/scripts/agent-native/v2/extensions/agui-projection.mjs +191 -0
- package/scripts/agent-native/v2/material-admission.mjs +295 -0
- package/scripts/agent-native/v2/material-cli-adapter.mjs +134 -0
- package/scripts/agent-native/v2/material-context.mjs +251 -0
- package/scripts/agent-native/v2/material-identity.mjs +71 -0
- package/scripts/agent-native/v2/material-mcp-adapter.mjs +253 -0
- package/scripts/agent-native/v2/material-operation-registry.mjs +123 -0
- package/scripts/agent-native/v2/material-queries.mjs +398 -0
- package/scripts/agent-native/v2/material-registry.mjs +319 -0
- package/scripts/sg-material-mcp.mjs +98 -0
- package/scripts/sg-material.mjs +27 -0
- package/consumer-reference/adapters/style-dictionary.config.mjs +0 -36
- package/consumer-reference/baselines/calibration.json +0 -260
- package/consumer-reference/baselines/manifest.json +0 -21
- package/consumer-reference/fixtures/consumer-conformance/e2e-fixture.mjs +0 -282
- package/consumer-reference/fixtures/consumer-conformance/manifest.json +0 -102
- package/consumer-reference/fixtures/consumer-conformance/runtime-proof.mjs +0 -32
- package/consumer-reference/fixtures/consumer-conformance/valid-migration-result.json +0 -18
- package/consumer-reference/fixtures/consumer-conformance/valid-migration.json +0 -142
- package/consumer-reference/fixtures/invalid-stable-ended-support.json +0 -19
- package/consumer-reference/fixtures/promotion/invalid-blocking-evidence.json +0 -26
- package/consumer-reference/fixtures/promotion/invalid-count-only.json +0 -29
- package/consumer-reference/fixtures/promotion/invalid-missing-owner-migration.json +0 -25
- package/consumer-reference/fixtures/promotion/invalid-normative-bypass-no-regression.json +0 -25
- package/consumer-reference/fixtures/promotion/invalid-related-counted-independent.json +0 -45
- package/consumer-reference/fixtures/promotion/invalid-stable-ended-support.json +0 -26
- package/consumer-reference/fixtures/promotion/manifest.json +0 -15
- package/consumer-reference/fixtures/promotion/valid-deferred-example.json +0 -67
- package/consumer-reference/fixtures/promotion/valid-normative-bypass.json +0 -67
- package/consumer-reference/fixtures/token-portability/invalid-cycle.json +0 -7
- package/consumer-reference/fixtures/token-portability/invalid-dangling-alias.json +0 -6
- package/consumer-reference/fixtures/token-portability/invalid-extends.json +0 -4
- package/consumer-reference/fixtures/token-portability/invalid-json-pointer.json +0 -7
- package/consumer-reference/fixtures/token-portability/invalid-resolver.json +0 -9
- package/consumer-reference/fixtures/token-portability/invalid-type-mismatch.json +0 -10
- package/consumer-reference/fixtures/token-portability/invalid-unknown-reserved.json +0 -6
- package/consumer-reference/fixtures/token-portability/invalid-untested-type.json +0 -6
- package/consumer-reference/fixtures/token-portability/valid-border.json +0 -14
- package/consumer-reference/fixtures/token-portability/valid-reference.json +0 -32
- package/consumer-reference/fixtures/token-portability/valid-whole-alias.json +0 -7
- package/consumer-reference/fixtures/valid-deprecated.json +0 -21
- package/consumer-reference/fixtures/valid-experimental.json +0 -19
- package/consumer-reference/generated/manifest.json +0 -40
- package/consumer-reference/generated/tokens.css +0 -12
- package/consumer-reference/policies/shared-experimental.json +0 -37
- package/consumer-reference/schema/ax-evidence.schema.json +0 -30
- package/consumer-reference/schema/baseline-manifest.schema.json +0 -55
- package/consumer-reference/schema/calibration-record.schema.json +0 -190
- package/consumer-reference/schema/capture-session.schema.json +0 -161
- package/consumer-reference/schema/component-state.schema.json +0 -150
- package/consumer-reference/schema/consumer-conformance-record.schema.json +0 -365
- package/consumer-reference/schema/dom-evidence.schema.json +0 -38
- package/consumer-reference/schema/evidence-record.schema.json +0 -81
- package/consumer-reference/schema/fixture-manifest.schema.json +0 -32
- package/consumer-reference/schema/item.schema.json +0 -188
- package/consumer-reference/schema/page-evidence-manifest.schema.json +0 -216
- package/consumer-reference/schema/page-evidence-session.schema.json +0 -119
- package/consumer-reference/schema/portable-tokens.schema.json +0 -104
- package/consumer-reference/schema/promotion-rfc.schema.json +0 -219
- package/consumer-reference/schema/runtime-evidence-manifest.schema.json +0 -33
- package/consumer-reference/schema/visual-evidence.schema.json +0 -31
- package/design-engineering/consumer-migration-readiness.md +0 -124
- package/design-engineering/interface-craft.md +0 -107
- package/design-engineering/reference-profiles/external-adaptation/index.md +0 -12
- package/design-engineering/reference-profiles/governed-local/editorial/components/button.component.json +0 -125
- package/design-engineering/reference-profiles/governed-local/editorial/evidence/button.evidence.json +0 -3504
- package/design-engineering/reference-profiles/governed-local/editorial/fixtures/button.fixture.json +0 -65
- package/design-engineering/reference-profiles/governed-local/editorial/generated/evidence-coverage.md +0 -23
- package/design-engineering/reference-profiles/governed-local/editorial/generated/keyboard-matrix.md +0 -19
- package/design-engineering/reference-profiles/governed-local/editorial/generated/state-matrix.md +0 -21
- package/design-engineering/reference-profiles/governed-local/editorial/local-foundations.json +0 -12
- package/design-engineering/reference-profiles/governed-local/editorial/states/button.states.json +0 -195
- package/design-engineering/reference-profiles/governed-local/editorial/tokens.dtcg.json +0 -17
- package/design-engineering/reference-profiles/governed-local/terminal/components/button.component.json +0 -125
- package/design-engineering/reference-profiles/governed-local/terminal/evidence/button.evidence.json +0 -3504
- package/design-engineering/reference-profiles/governed-local/terminal/fixtures/button.fixture.json +0 -65
- package/design-engineering/reference-profiles/governed-local/terminal/generated/evidence-coverage.md +0 -23
- package/design-engineering/reference-profiles/governed-local/terminal/generated/keyboard-matrix.md +0 -19
- package/design-engineering/reference-profiles/governed-local/terminal/generated/state-matrix.md +0 -21
- package/design-engineering/reference-profiles/governed-local/terminal/local-foundations.json +0 -12
- package/design-engineering/reference-profiles/governed-local/terminal/profile.json +0 -43
- package/design-engineering/reference-profiles/governed-local/terminal/states/button.states.json +0 -195
- package/design-engineering/reference-profiles/governed-local/terminal/tokens.dtcg.json +0 -17
- package/game-ui/classification.md +0 -82
- package/game-ui/reference-record.md +0 -62
- package/game-ui/screen-hierarchy.md +0 -107
- package/game-ui/unity/architecture.md +0 -166
- package/game-ui/unity/cli-loop.md +0 -84
- package/game-ui/unity/data/unity-technologies-public-repositories.json +0 -26654
- package/game-ui/unity/org-wiki.md +0 -146
- package/game-ui/unity/repository-map.md +0 -102
- package/game-ui/unity/ui-systems.md +0 -85
- package/motion/practice-reference.md +0 -145
- package/motion/review-workflow.md +0 -86
- package/motion/vocabulary.md +0 -82
- package/platform-guides/apple-interaction.md +0 -89
- package/scripts/agent-native/events.mjs +0 -113
- package/scripts/agent-native/immutable-store.mjs +0 -102
- package/scripts/artifact-metadata.mjs +0 -20
- package/scripts/audit-evidence-freshness.mjs +0 -308
- package/scripts/baseline-contract.mjs +0 -189
- package/scripts/baseline-schema-parity.mjs +0 -40
- package/scripts/build-reference-artifacts.mjs +0 -127
- package/scripts/calibration-raw-contract.mjs +0 -172
- package/scripts/capture-session-contract.mjs +0 -187
- package/scripts/component-state-artifact-fixture.mjs +0 -44
- package/scripts/component-state-contract.mjs +0 -99
- package/scripts/component-state-semantics.mjs +0 -128
- package/scripts/component-state-workflow-contract.mjs +0 -67
- package/scripts/component-state-workflow-negative-cases.mjs +0 -64
- package/scripts/consumer-conformance-contract.mjs +0 -198
- package/scripts/consumer-evidence-governance-contract.mjs +0 -210
- package/scripts/consumer-reference-case-runner.mjs +0 -93
- package/scripts/consumer-reference-schema.mjs +0 -155
- package/scripts/create-component-state-session.mjs +0 -100
- package/scripts/create-page-evidence-session.mjs +0 -139
- package/scripts/domain-document-boundaries.mjs +0 -40
- package/scripts/domain-validation-checks.mjs +0 -141
- package/scripts/evidence-artifact-contract.mjs +0 -191
- package/scripts/finalize-component-state-evidence.mjs +0 -165
- package/scripts/finalize-page-evidence.mjs +0 -197
- package/scripts/generate-consumer-reference-evidence.mjs +0 -154
- package/scripts/generate-patterns.mjs +0 -218
- package/scripts/governance-matrix-contract.mjs +0 -73
- package/scripts/governance-matrix-negative-cases.mjs +0 -114
- package/scripts/governance-policy-contract.mjs +0 -49
- package/scripts/governance-test-fixture.mjs +0 -321
- package/scripts/governance-workflow-negative-cases.mjs +0 -241
- package/scripts/governed-profile-registry.mjs +0 -125
- package/scripts/json-schema-formats.mjs +0 -31
- package/scripts/markdown-structure.mjs +0 -45
- package/scripts/page-artifact-metadata.mjs +0 -124
- package/scripts/page-evidence-contract.mjs +0 -297
- package/scripts/page-evidence-fixture.mjs +0 -271
- package/scripts/pattern-data.mjs +0 -325
- package/scripts/profile-record-contract.mjs +0 -140
- package/scripts/promotion-attestation-contract.mjs +0 -91
- package/scripts/promotion-boundary-test-contract.mjs +0 -92
- package/scripts/promotion-fixture-inventory.mjs +0 -109
- package/scripts/promotion-governance-contract.mjs +0 -28
- package/scripts/reference-artifact-path-contract.mjs +0 -28
- package/scripts/reference-profile-contract.mjs +0 -114
- package/scripts/reference-token-contract.mjs +0 -156
- package/scripts/run-consumer-page-evidence-ci.mjs +0 -170
- package/scripts/summarize-sentinel-calibration.mjs +0 -98
- package/scripts/test-agent-adapter-conformance.mjs +0 -250
- package/scripts/test-agent-conformance-receipt.mjs +0 -106
- package/scripts/test-agent-events.mjs +0 -81
- package/scripts/test-agent-execution-effects.mjs +0 -114
- package/scripts/test-agent-execution-fixtures.mjs +0 -140
- package/scripts/test-agent-execution-kernel.mjs +0 -39
- package/scripts/test-agent-execution-learning.mjs +0 -130
- package/scripts/test-agent-execution-lifecycle.mjs +0 -143
- package/scripts/test-agent-execution-safety.mjs +0 -158
- package/scripts/test-agent-execution-views.mjs +0 -117
- package/scripts/test-agent-identity-integrity-cases.mjs +0 -160
- package/scripts/test-agent-knowledge-kernel.mjs +0 -183
- package/scripts/test-agent-learning.mjs +0 -246
- package/scripts/test-agent-mcp.mjs +0 -246
- package/scripts/test-agent-native-schemas.mjs +0 -215
- package/scripts/test-agent-projections.mjs +0 -249
- package/scripts/test-agent-registry-mcp-integrity.mjs +0 -215
- package/scripts/test-agent-registry-mutations.mjs +0 -110
- package/scripts/test-audit-evidence-freshness.mjs +0 -177
- package/scripts/test-component-state-sentinel.mjs +0 -35
- package/scripts/test-component-state-source-contract.mjs +0 -83
- package/scripts/test-consumer-conformance-sentinel.mjs +0 -165
- package/scripts/test-consumer-reference-sentinel.mjs +0 -31
- package/scripts/test-generate-consumer-reference-evidence.mjs +0 -124
- package/scripts/test-json-cli-output.mjs +0 -151
- package/scripts/test-json-schema-formats.mjs +0 -40
- package/scripts/test-reference-adapters.mjs +0 -199
- package/scripts/test-renderer-purity.mjs +0 -34
- package/scripts/test-sg-cli.mjs +0 -129
- package/scripts/test-summarize-sentinel-calibration.mjs +0 -226
- package/scripts/test-validate-baseline-manifest.mjs +0 -234
- package/scripts/test-validate-component-state-artifacts.mjs +0 -243
- package/scripts/test-validate-component-state.mjs +0 -106
- package/scripts/test-validate-consumer-conformance.mjs +0 -427
- package/scripts/test-validate-consumer-reference-cli.mjs +0 -69
- package/scripts/test-validate-consumer-reference.mjs +0 -263
- package/scripts/test-validate-domains.mjs +0 -357
- package/scripts/test-validate-governance.mjs +0 -292
- package/scripts/test-validate-ia.mjs +0 -262
- package/scripts/test-validate-okf.mjs +0 -73
- package/scripts/test-validate-page-evidence.mjs +0 -302
- package/scripts/test-validate-patterns.mjs +0 -157
- package/scripts/test-validate-promotion-rfc.mjs +0 -250
- package/scripts/test-validate-reference-profiles.mjs +0 -170
- package/scripts/test-validate-unity-org-wiki.mjs +0 -57
- package/scripts/test-validate-unity-source-contracts.mjs +0 -67
- package/scripts/test-validate-vocabulary.mjs +0 -174
- package/scripts/test-validate-webpage-workflow.mjs +0 -293
- package/scripts/validate-baseline-manifest.mjs +0 -44
- package/scripts/validate-catalog.mjs +0 -65
- package/scripts/validate-component-state.mjs +0 -141
- package/scripts/validate-consumer-conformance.mjs +0 -477
- package/scripts/validate-consumer-reference.mjs +0 -288
- package/scripts/validate-domains.mjs +0 -237
- package/scripts/validate-governance.mjs +0 -248
- package/scripts/validate-ia.mjs +0 -136
- package/scripts/validate-links.mjs +0 -66
- package/scripts/validate-okf.mjs +0 -104
- package/scripts/validate-page-evidence.mjs +0 -191
- package/scripts/validate-patterns.mjs +0 -246
- package/scripts/validate-promotion-rfc.mjs +0 -224
- package/scripts/validate-reference-artifacts.mjs +0 -125
- package/scripts/validate-renderer-purity.mjs +0 -56
- package/scripts/validate-unity-org-wiki.mjs +0 -146
- package/scripts/validate-unity-source-contracts.mjs +0 -107
- package/scripts/validate-vocabulary.mjs +0 -115
- package/scripts/validate-webpage-workflow.mjs +0 -254
- package/scripts/visual-expectation-contract.mjs +0 -20
- package/scripts/workflow-action-contract.mjs +0 -163
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import assert from "node:assert/strict";
|
|
4
|
-
import fs from "node:fs";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { spawnSync } from "node:child_process";
|
|
7
|
-
|
|
8
|
-
const resultReference = process.env.STYLEGALLERY_RESULT_ARTIFACT;
|
|
9
|
-
const contextValue = process.env.STYLEGALLERY_RUNTIME_CONTEXT;
|
|
10
|
-
assert.ok(resultReference && contextValue, "the validator must provide the result path and runtime context");
|
|
11
|
-
assert.equal(path.posix.normalize(resultReference), resultReference);
|
|
12
|
-
assert.ok(!path.posix.isAbsolute(resultReference) && !resultReference.split("/").includes(".."));
|
|
13
|
-
|
|
14
|
-
if (process.argv.includes("--lock-worktree")) {
|
|
15
|
-
const locked = spawnSync("git", ["worktree", "lock", "."], { encoding: "utf8" });
|
|
16
|
-
assert.equal(locked.status, 0, locked.stderr);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const context = JSON.parse(contextValue);
|
|
20
|
-
const persisted = JSON.parse(JSON.stringify({ drawer: "open", route: "/gallery", selection: null }));
|
|
21
|
-
assert.deepEqual(persisted, { drawer: "open", route: "/gallery", selection: null });
|
|
22
|
-
|
|
23
|
-
const output = {
|
|
24
|
-
...context,
|
|
25
|
-
record_kind: "consumer_migration_scenario_result",
|
|
26
|
-
recorded_at: "2026-07-21T00:00:00Z",
|
|
27
|
-
schema_version: "1.0",
|
|
28
|
-
status: "passed",
|
|
29
|
-
};
|
|
30
|
-
const resultFile = path.resolve(process.cwd(), resultReference);
|
|
31
|
-
fs.mkdirSync(path.dirname(resultFile), { recursive: true });
|
|
32
|
-
fs.writeFileSync(resultFile, `${JSON.stringify(output, null, 2)}\n`, { flag: "wx" });
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"argv": [
|
|
3
|
-
"node",
|
|
4
|
-
"consumer-reference/fixtures/consumer-conformance/runtime-proof.mjs"
|
|
5
|
-
],
|
|
6
|
-
"evidence_method": "integration",
|
|
7
|
-
"exit_code": 0,
|
|
8
|
-
"record_kind": "consumer_migration_scenario_result",
|
|
9
|
-
"recorded_at": "2026-07-21T00:00:00Z",
|
|
10
|
-
"repository": "changeroa/StyleGallery",
|
|
11
|
-
"revision": "84bf420d568f68021117f8142e6d982b4966de2f",
|
|
12
|
-
"run_id": "run-20260721-001",
|
|
13
|
-
"scenario_id": "migration-round-trip",
|
|
14
|
-
"schema_version": "1.0",
|
|
15
|
-
"session_id": "session-20260721-001",
|
|
16
|
-
"source_digest": "6d90893774e2228ffe9ae0286f5b3392b103ea1bf5e571fcde2f7a861d76372c",
|
|
17
|
-
"status": "passed"
|
|
18
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"adoption_mappings": [
|
|
3
|
-
{
|
|
4
|
-
"consumer_target": {
|
|
5
|
-
"identity": "GalleryShell",
|
|
6
|
-
"kind": "component"
|
|
7
|
-
},
|
|
8
|
-
"debt": [],
|
|
9
|
-
"deviations": [],
|
|
10
|
-
"local_decision": {
|
|
11
|
-
"decision": "Keep the spacing value consumer-local and map only the layout unit role.",
|
|
12
|
-
"identity": "--space-shell-gap",
|
|
13
|
-
"kind": "token"
|
|
14
|
-
},
|
|
15
|
-
"scenario_ids": [
|
|
16
|
-
"migration-round-trip"
|
|
17
|
-
],
|
|
18
|
-
"stylegallery": {
|
|
19
|
-
"anchor": "#recommended-pattern-stack",
|
|
20
|
-
"path": "recipes/dashboard.md",
|
|
21
|
-
"revision": "66601da6e81c69674edf5c1b9b1b0862d4597fe9"
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"claim_boundary": {
|
|
26
|
-
"certifies_accessibility": false,
|
|
27
|
-
"certifies_product_correctness": false,
|
|
28
|
-
"scope": "This record binds migration scenarios to consumer-owned runtime evidence only."
|
|
29
|
-
},
|
|
30
|
-
"consumer": {
|
|
31
|
-
"relevant_sources": [
|
|
32
|
-
"consumer-reference/fixtures/consumer-conformance/runtime-proof.mjs",
|
|
33
|
-
"consumer-reference/schema/consumer-conformance-record.schema.json",
|
|
34
|
-
"scripts/consumer-conformance-contract.mjs",
|
|
35
|
-
"scripts/validate-consumer-conformance.mjs"
|
|
36
|
-
],
|
|
37
|
-
"repository": "changeroa/StyleGallery",
|
|
38
|
-
"revision": "84bf420d568f68021117f8142e6d982b4966de2f"
|
|
39
|
-
},
|
|
40
|
-
"id": "example-consumer-migration",
|
|
41
|
-
"migration_dimensions": {
|
|
42
|
-
"action_parity": {
|
|
43
|
-
"scenario_ids": [
|
|
44
|
-
"migration-round-trip"
|
|
45
|
-
],
|
|
46
|
-
"status": "applicable"
|
|
47
|
-
},
|
|
48
|
-
"atomic_batch_behavior": {
|
|
49
|
-
"reason": "The migrated surface exposes no batch operation in this scope.",
|
|
50
|
-
"status": "not_applicable"
|
|
51
|
-
},
|
|
52
|
-
"behavior_inventory": {
|
|
53
|
-
"scenario_ids": [
|
|
54
|
-
"migration-round-trip"
|
|
55
|
-
],
|
|
56
|
-
"status": "applicable"
|
|
57
|
-
},
|
|
58
|
-
"contract_precedence": {
|
|
59
|
-
"scenario_ids": [
|
|
60
|
-
"migration-round-trip"
|
|
61
|
-
],
|
|
62
|
-
"status": "applicable"
|
|
63
|
-
},
|
|
64
|
-
"defaults_tri_state_mapping": {
|
|
65
|
-
"reason": "The migrated fields do not have defaults or tri-state semantics.",
|
|
66
|
-
"status": "not_applicable"
|
|
67
|
-
},
|
|
68
|
-
"direct_mutation": {
|
|
69
|
-
"scenario_ids": [
|
|
70
|
-
"migration-round-trip"
|
|
71
|
-
],
|
|
72
|
-
"status": "applicable"
|
|
73
|
-
},
|
|
74
|
-
"exact_time_boundary": {
|
|
75
|
-
"reason": "The migrated behavior has no exact-time scheduling boundary.",
|
|
76
|
-
"status": "not_applicable"
|
|
77
|
-
},
|
|
78
|
-
"field_parity": {
|
|
79
|
-
"scenario_ids": [
|
|
80
|
-
"migration-round-trip"
|
|
81
|
-
],
|
|
82
|
-
"status": "applicable"
|
|
83
|
-
},
|
|
84
|
-
"indirect_mutation": {
|
|
85
|
-
"scenario_ids": [
|
|
86
|
-
"migration-round-trip"
|
|
87
|
-
],
|
|
88
|
-
"status": "applicable"
|
|
89
|
-
},
|
|
90
|
-
"persistence_round_trip": {
|
|
91
|
-
"scenario_ids": [
|
|
92
|
-
"migration-round-trip"
|
|
93
|
-
],
|
|
94
|
-
"status": "applicable"
|
|
95
|
-
},
|
|
96
|
-
"reset_boundary": {
|
|
97
|
-
"scenario_ids": [
|
|
98
|
-
"migration-round-trip"
|
|
99
|
-
],
|
|
100
|
-
"status": "applicable"
|
|
101
|
-
},
|
|
102
|
-
"route_parity": {
|
|
103
|
-
"scenario_ids": [
|
|
104
|
-
"migration-round-trip"
|
|
105
|
-
],
|
|
106
|
-
"status": "applicable"
|
|
107
|
-
},
|
|
108
|
-
"state_transitions": {
|
|
109
|
-
"scenario_ids": [
|
|
110
|
-
"migration-round-trip"
|
|
111
|
-
],
|
|
112
|
-
"status": "applicable"
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
"page_evidence": {
|
|
116
|
-
"reason": "Page evidence is supplied by the consumer during end-to-end composition.",
|
|
117
|
-
"status": "not_applicable"
|
|
118
|
-
},
|
|
119
|
-
"record_kind": "consumer_migration_conformance",
|
|
120
|
-
"scenarios": [
|
|
121
|
-
{
|
|
122
|
-
"assertions": [
|
|
123
|
-
"The drawer state and persisted route data match after a reload."
|
|
124
|
-
],
|
|
125
|
-
"argv": [
|
|
126
|
-
"node",
|
|
127
|
-
"consumer-reference/fixtures/consumer-conformance/runtime-proof.mjs"
|
|
128
|
-
],
|
|
129
|
-
"evidence_method": "integration",
|
|
130
|
-
"exit_code": 0,
|
|
131
|
-
"id": "migration-round-trip",
|
|
132
|
-
"observable_actions": [
|
|
133
|
-
"Run the synthetic migration fixture and inspect its machine-readable result."
|
|
134
|
-
],
|
|
135
|
-
"result_artifact": "consumer-reference/fixtures/consumer-conformance/valid-migration-result.json",
|
|
136
|
-
"run_id": "run-20260721-001",
|
|
137
|
-
"session_id": "session-20260721-001",
|
|
138
|
-
"source_digest": "6d90893774e2228ffe9ae0286f5b3392b103ea1bf5e571fcde2f7a861d76372c"
|
|
139
|
-
}
|
|
140
|
-
],
|
|
141
|
-
"schema_version": "1.0"
|
|
142
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"artifact_mode": "schema_only",
|
|
3
|
-
"fixture_independence": "related",
|
|
4
|
-
"handoff": {
|
|
5
|
-
"record": "consumer-reference/fixtures/invalid-stable-ended-support.json",
|
|
6
|
-
"status": "declared"
|
|
7
|
-
},
|
|
8
|
-
"id": "invalid-stable-ended-support",
|
|
9
|
-
"maturity": "stable",
|
|
10
|
-
"owner": {
|
|
11
|
-
"enforcement": "placeholder",
|
|
12
|
-
"name": "Repository governance owner"
|
|
13
|
-
},
|
|
14
|
-
"review_independence": "single_account",
|
|
15
|
-
"schema_version": "1.0",
|
|
16
|
-
"support": {
|
|
17
|
-
"status": "ended"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [],
|
|
3
|
-
"compatibility": { "breaking": false, "surface": "Synthetic invariant contract surface." },
|
|
4
|
-
"decision": "deferred",
|
|
5
|
-
"deprecation": { "plan": "No deprecation while deferred.", "required": false },
|
|
6
|
-
"eligibility_basis": "full_contract",
|
|
7
|
-
"evidence": [
|
|
8
|
-
{ "id": "blocking", "kind": "blocking", "reference": "synthetic-fixture:blocking", "status": "failed" },
|
|
9
|
-
{ "id": "regression", "kind": "regression", "reference": "synthetic-fixture:regression", "status": "passed" }
|
|
10
|
-
],
|
|
11
|
-
"example_only": true,
|
|
12
|
-
"exceptions": [],
|
|
13
|
-
"id": "invalid-blocking-evidence",
|
|
14
|
-
"known_issues": ["The blocking evidence failed."],
|
|
15
|
-
"migration": { "plan": "No migration while deferred.", "required": false },
|
|
16
|
-
"normative_bypass": "none",
|
|
17
|
-
"owner": { "enforcement": "placeholder", "migration": "Synthetic migration owner", "rollback": "Synthetic rollback owner", "scope": "Repository governance owner", "support": "Synthetic support owner" },
|
|
18
|
-
"provenance": { "debt_resolved": false, "source": "Synthetic fixture only" },
|
|
19
|
-
"review_independence": "single_account",
|
|
20
|
-
"rollback": { "action": "Keep deferred.", "triggers": ["Blocking evidence fails."] },
|
|
21
|
-
"schema_version": "1.0",
|
|
22
|
-
"scope": { "aesthetic": false, "kind": "invariant", "summary": "Incorrectly proceed while blocking evidence is failed." },
|
|
23
|
-
"stable_scope_decision": false,
|
|
24
|
-
"support": { "capacity": "committed", "status": "active" },
|
|
25
|
-
"transition": { "from": "consumer_local", "to": "shared_experimental" }
|
|
26
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [
|
|
3
|
-
{ "attested_by": "Synthetic owner A", "context_id": "context-a", "consumer_id": "consumer-a", "count_toward_gate": true, "organization_id": "organization-a", "relationship": "independent" },
|
|
4
|
-
{ "attested_by": "Synthetic owner B", "context_id": "context-b", "consumer_id": "consumer-b", "count_toward_gate": true, "organization_id": "organization-b", "relationship": "independent" }
|
|
5
|
-
],
|
|
6
|
-
"compatibility": { "breaking": false, "surface": "Synthetic invariant contract surface." },
|
|
7
|
-
"decision": "deferred",
|
|
8
|
-
"deprecation": { "plan": "No deprecation while deferred.", "required": false },
|
|
9
|
-
"eligibility_basis": "consumer_count_only",
|
|
10
|
-
"evidence": [
|
|
11
|
-
{ "id": "claim", "kind": "claim_scoped", "reference": "synthetic-fixture:claim", "status": "passed" },
|
|
12
|
-
{ "id": "regression", "kind": "regression", "reference": "synthetic-fixture:regression", "status": "passed" }
|
|
13
|
-
],
|
|
14
|
-
"example_only": true,
|
|
15
|
-
"exceptions": [],
|
|
16
|
-
"id": "invalid-count-only",
|
|
17
|
-
"known_issues": [],
|
|
18
|
-
"migration": { "plan": "No migration while deferred.", "required": false },
|
|
19
|
-
"normative_bypass": "none",
|
|
20
|
-
"owner": { "enforcement": "placeholder", "migration": "Synthetic migration owner", "rollback": "Synthetic rollback owner", "scope": "Repository governance owner", "support": "Synthetic support owner" },
|
|
21
|
-
"provenance": { "debt_resolved": false, "source": "Synthetic fixture only" },
|
|
22
|
-
"review_independence": "single_account",
|
|
23
|
-
"rollback": { "action": "Keep deferred.", "triggers": ["Operational duties are incomplete."] },
|
|
24
|
-
"schema_version": "1.0",
|
|
25
|
-
"scope": { "aesthetic": false, "kind": "invariant", "summary": "Incorrectly use adoption count as the whole promotion decision." },
|
|
26
|
-
"stable_scope_decision": false,
|
|
27
|
-
"support": { "capacity": "committed", "status": "active" },
|
|
28
|
-
"transition": { "from": "consumer_local", "to": "shared_experimental" }
|
|
29
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [],
|
|
3
|
-
"compatibility": { "breaking": true, "surface": "Synthetic breaking contract surface." },
|
|
4
|
-
"decision": "deferred",
|
|
5
|
-
"deprecation": { "plan": "A migration is required before deprecation.", "required": true },
|
|
6
|
-
"eligibility_basis": "full_contract",
|
|
7
|
-
"evidence": [
|
|
8
|
-
{ "id": "claim", "kind": "claim_scoped", "reference": "synthetic-fixture:claim", "status": "passed" },
|
|
9
|
-
{ "id": "regression", "kind": "regression", "reference": "synthetic-fixture:regression", "status": "passed" }
|
|
10
|
-
],
|
|
11
|
-
"example_only": true,
|
|
12
|
-
"exceptions": [],
|
|
13
|
-
"id": "invalid-missing-owner-migration",
|
|
14
|
-
"known_issues": [],
|
|
15
|
-
"normative_bypass": "none",
|
|
16
|
-
"owner": { "enforcement": "placeholder", "rollback": "Synthetic rollback owner", "scope": "Repository governance owner", "support": "Synthetic support owner" },
|
|
17
|
-
"provenance": { "debt_resolved": false, "source": "Synthetic fixture only" },
|
|
18
|
-
"review_independence": "single_account",
|
|
19
|
-
"rollback": { "action": "Keep deferred.", "triggers": ["Migration duty is unowned."] },
|
|
20
|
-
"schema_version": "1.0",
|
|
21
|
-
"scope": { "aesthetic": false, "kind": "invariant", "summary": "Incorrectly omit migration plan and migration ownership." },
|
|
22
|
-
"stable_scope_decision": false,
|
|
23
|
-
"support": { "capacity": "committed", "status": "active" },
|
|
24
|
-
"transition": { "from": "consumer_local", "to": "shared_experimental" }
|
|
25
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [],
|
|
3
|
-
"compatibility": { "breaking": false, "surface": "Synthetic correctness contract surface." },
|
|
4
|
-
"decision": "deferred",
|
|
5
|
-
"deprecation": { "plan": "No deprecation while deferred.", "required": false },
|
|
6
|
-
"eligibility_basis": "full_contract",
|
|
7
|
-
"evidence": [
|
|
8
|
-
{ "id": "claim", "kind": "claim_scoped", "reference": "synthetic-fixture:claim", "status": "passed" }
|
|
9
|
-
],
|
|
10
|
-
"example_only": true,
|
|
11
|
-
"exceptions": [],
|
|
12
|
-
"id": "invalid-normative-bypass-no-regression",
|
|
13
|
-
"known_issues": [],
|
|
14
|
-
"migration": { "plan": "Apply only after compatibility review.", "required": false },
|
|
15
|
-
"normative_bypass": "normative_correctness",
|
|
16
|
-
"owner": { "enforcement": "placeholder", "migration": "Synthetic migration owner", "rollback": "Synthetic rollback owner", "scope": "Repository governance owner", "support": "Synthetic support owner" },
|
|
17
|
-
"provenance": { "debt_resolved": false, "source": "Synthetic fixture only" },
|
|
18
|
-
"review_independence": "single_account",
|
|
19
|
-
"rollback": { "action": "Keep deferred.", "triggers": ["Regression evidence is absent or fails."] },
|
|
20
|
-
"schema_version": "1.0",
|
|
21
|
-
"scope": { "aesthetic": false, "kind": "normative_correctness", "summary": "Incorrectly bypass adoption count without regression proof." },
|
|
22
|
-
"stable_scope_decision": false,
|
|
23
|
-
"support": { "capacity": "committed", "status": "active" },
|
|
24
|
-
"transition": { "from": "consumer_local", "to": "shared_experimental" }
|
|
25
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [
|
|
3
|
-
{
|
|
4
|
-
"attested_by": "Synthetic owner",
|
|
5
|
-
"context_id": "editorial",
|
|
6
|
-
"consumer_id": "editorial-reference-profile",
|
|
7
|
-
"count_toward_gate": true,
|
|
8
|
-
"organization_id": "stylegallery",
|
|
9
|
-
"profile_record": "design-engineering/reference-profiles/governed-local/editorial/profile.json",
|
|
10
|
-
"relationship": "independent"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"attested_by": "Synthetic owner",
|
|
14
|
-
"context_id": "terminal",
|
|
15
|
-
"consumer_id": "terminal-reference-profile",
|
|
16
|
-
"count_toward_gate": true,
|
|
17
|
-
"organization_id": "stylegallery",
|
|
18
|
-
"profile_record": "design-engineering/reference-profiles/governed-local/terminal/profile.json",
|
|
19
|
-
"relationship": "independent"
|
|
20
|
-
}
|
|
21
|
-
],
|
|
22
|
-
"compatibility": { "breaking": false, "surface": "Synthetic invariant contract surface." },
|
|
23
|
-
"decision": "deferred",
|
|
24
|
-
"deprecation": { "plan": "No deprecation while deferred.", "required": false },
|
|
25
|
-
"eligibility_basis": "full_contract",
|
|
26
|
-
"evidence": [
|
|
27
|
-
{ "id": "claim", "kind": "claim_scoped", "reference": "synthetic-fixture:claim", "status": "passed" },
|
|
28
|
-
{ "id": "regression", "kind": "regression", "reference": "synthetic-fixture:regression", "status": "passed" }
|
|
29
|
-
],
|
|
30
|
-
"example_only": true,
|
|
31
|
-
"exceptions": [],
|
|
32
|
-
"id": "invalid-related-counted-independent",
|
|
33
|
-
"known_issues": [],
|
|
34
|
-
"migration": { "plan": "No migration while deferred.", "required": false },
|
|
35
|
-
"normative_bypass": "none",
|
|
36
|
-
"owner": { "enforcement": "placeholder", "migration": "Synthetic migration owner", "rollback": "Synthetic rollback owner", "scope": "Repository governance owner", "support": "Synthetic support owner" },
|
|
37
|
-
"provenance": { "debt_resolved": false, "source": "Synthetic fixture only" },
|
|
38
|
-
"review_independence": "single_account",
|
|
39
|
-
"rollback": { "action": "Keep deferred.", "triggers": ["Independence is not proven."] },
|
|
40
|
-
"schema_version": "1.0",
|
|
41
|
-
"scope": { "aesthetic": false, "kind": "invariant", "summary": "Incorrectly count related local profiles as independent consumers." },
|
|
42
|
-
"stable_scope_decision": false,
|
|
43
|
-
"support": { "capacity": "committed", "status": "active" },
|
|
44
|
-
"transition": { "from": "consumer_local", "to": "shared_experimental" }
|
|
45
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [],
|
|
3
|
-
"compatibility": { "breaking": false, "surface": "Synthetic stable contract surface." },
|
|
4
|
-
"decision": "deferred",
|
|
5
|
-
"deprecation": { "plan": "A consumed stable contract requires a named migration before deprecation.", "required": true },
|
|
6
|
-
"eligibility_basis": "full_contract",
|
|
7
|
-
"evidence": [
|
|
8
|
-
{ "id": "claim", "kind": "claim_scoped", "reference": "synthetic-fixture:claim", "status": "passed" },
|
|
9
|
-
{ "id": "regression", "kind": "regression", "reference": "synthetic-fixture:regression", "status": "passed" }
|
|
10
|
-
],
|
|
11
|
-
"example_only": true,
|
|
12
|
-
"exceptions": [],
|
|
13
|
-
"id": "invalid-stable-ended-support",
|
|
14
|
-
"known_issues": [],
|
|
15
|
-
"migration": { "plan": "Migrate every consumed surface before removal.", "required": true },
|
|
16
|
-
"normative_bypass": "none",
|
|
17
|
-
"owner": { "enforcement": "placeholder", "migration": "Synthetic migration owner", "rollback": "Synthetic rollback owner", "scope": "Repository governance owner", "support": "Synthetic support owner" },
|
|
18
|
-
"provenance": { "debt_resolved": true, "source": "Synthetic fixture only" },
|
|
19
|
-
"review_independence": "single_account",
|
|
20
|
-
"rollback": { "action": "Maintain or deprecate with migration.", "triggers": ["Stable support capacity ends."] },
|
|
21
|
-
"schema_version": "1.0",
|
|
22
|
-
"scope": { "aesthetic": false, "kind": "invariant", "summary": "Incorrectly propose stable status after support has ended." },
|
|
23
|
-
"stable_scope_decision": true,
|
|
24
|
-
"support": { "capacity": "No remaining support capacity", "status": "ended" },
|
|
25
|
-
"transition": { "from": "shared_experimental", "to": "stable" }
|
|
26
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "promotion-fixture-inventory",
|
|
3
|
-
"invalid_records": [
|
|
4
|
-
{ "expected_code": "promotion_blocking_evidence_failed", "file": "invalid-blocking-evidence.json" },
|
|
5
|
-
{ "expected_code": "promotion_count_only_forbidden", "file": "invalid-count-only.json" },
|
|
6
|
-
{ "expected_code": "promotion_owner_migration_required", "file": "invalid-missing-owner-migration.json" },
|
|
7
|
-
{ "expected_code": "promotion_normative_regression_required", "file": "invalid-normative-bypass-no-regression.json" },
|
|
8
|
-
{ "expected_code": "promotion_related_consumer_counted", "file": "invalid-related-counted-independent.json" },
|
|
9
|
-
{ "expected_code": "stable_support_ended", "file": "invalid-stable-ended-support.json" }
|
|
10
|
-
],
|
|
11
|
-
"policy_record": "consumer-reference/policies/shared-experimental.json",
|
|
12
|
-
"schema_record": "consumer-reference/schema/promotion-rfc.schema.json",
|
|
13
|
-
"schema_version": "1.0",
|
|
14
|
-
"valid_records": ["valid-deferred-example.json", "valid-normative-bypass.json"]
|
|
15
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [],
|
|
3
|
-
"compatibility": {
|
|
4
|
-
"breaking": false,
|
|
5
|
-
"surface": "Synthetic invariant contract surface."
|
|
6
|
-
},
|
|
7
|
-
"decision": "deferred",
|
|
8
|
-
"deprecation": {
|
|
9
|
-
"plan": "No deprecation is required while this synthetic proposal remains deferred.",
|
|
10
|
-
"required": false
|
|
11
|
-
},
|
|
12
|
-
"eligibility_basis": "full_contract",
|
|
13
|
-
"evidence": [
|
|
14
|
-
{
|
|
15
|
-
"id": "claim-scoped-example",
|
|
16
|
-
"kind": "claim_scoped",
|
|
17
|
-
"reference": "synthetic-fixture:claim-scoped-example",
|
|
18
|
-
"status": "passed"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": "regression-example",
|
|
22
|
-
"kind": "regression",
|
|
23
|
-
"reference": "synthetic-fixture:regression-example",
|
|
24
|
-
"status": "passed"
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"example_only": true,
|
|
28
|
-
"exceptions": [],
|
|
29
|
-
"id": "valid-deferred-example",
|
|
30
|
-
"known_issues": [],
|
|
31
|
-
"migration": {
|
|
32
|
-
"plan": "No migration begins unless a later separately reviewed decision changes the deferred status.",
|
|
33
|
-
"required": false
|
|
34
|
-
},
|
|
35
|
-
"normative_bypass": "none",
|
|
36
|
-
"owner": {
|
|
37
|
-
"enforcement": "placeholder",
|
|
38
|
-
"migration": "Synthetic migration owner",
|
|
39
|
-
"rollback": "Synthetic rollback owner",
|
|
40
|
-
"scope": "Repository governance owner",
|
|
41
|
-
"support": "Synthetic support owner"
|
|
42
|
-
},
|
|
43
|
-
"provenance": {
|
|
44
|
-
"debt_resolved": false,
|
|
45
|
-
"source": "Synthetic fixture only"
|
|
46
|
-
},
|
|
47
|
-
"review_independence": "single_account",
|
|
48
|
-
"rollback": {
|
|
49
|
-
"action": "Keep the proposal deferred and remove any unsupported shared routing.",
|
|
50
|
-
"triggers": ["Blocking evidence fails or the scope expands beyond the reviewed invariant."]
|
|
51
|
-
},
|
|
52
|
-
"schema_version": "1.0",
|
|
53
|
-
"scope": {
|
|
54
|
-
"aesthetic": false,
|
|
55
|
-
"kind": "invariant",
|
|
56
|
-
"summary": "Demonstrate a synthetic invariant promotion proposal without claiming adoption."
|
|
57
|
-
},
|
|
58
|
-
"stable_scope_decision": false,
|
|
59
|
-
"support": {
|
|
60
|
-
"capacity": "committed",
|
|
61
|
-
"status": "active"
|
|
62
|
-
},
|
|
63
|
-
"transition": {
|
|
64
|
-
"from": "consumer_local",
|
|
65
|
-
"to": "shared_experimental"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"attestations": [],
|
|
3
|
-
"compatibility": {
|
|
4
|
-
"breaking": false,
|
|
5
|
-
"surface": "Synthetic correctness contract surface."
|
|
6
|
-
},
|
|
7
|
-
"decision": "deferred",
|
|
8
|
-
"deprecation": {
|
|
9
|
-
"plan": "No deprecation is required for this deferred synthetic correction.",
|
|
10
|
-
"required": false
|
|
11
|
-
},
|
|
12
|
-
"eligibility_basis": "full_contract",
|
|
13
|
-
"evidence": [
|
|
14
|
-
{
|
|
15
|
-
"id": "claim-scoped-correctness",
|
|
16
|
-
"kind": "claim_scoped",
|
|
17
|
-
"reference": "synthetic-fixture:claim-scoped-correctness",
|
|
18
|
-
"status": "passed"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": "regression-correctness",
|
|
22
|
-
"kind": "regression",
|
|
23
|
-
"reference": "synthetic-fixture:regression-correctness",
|
|
24
|
-
"status": "passed"
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"example_only": true,
|
|
28
|
-
"exceptions": [],
|
|
29
|
-
"id": "valid-normative-bypass",
|
|
30
|
-
"known_issues": [],
|
|
31
|
-
"migration": {
|
|
32
|
-
"plan": "Apply only after compatibility review; keep a bounded rollback path.",
|
|
33
|
-
"required": false
|
|
34
|
-
},
|
|
35
|
-
"normative_bypass": "normative_correctness",
|
|
36
|
-
"owner": {
|
|
37
|
-
"enforcement": "placeholder",
|
|
38
|
-
"migration": "Synthetic migration owner",
|
|
39
|
-
"rollback": "Synthetic rollback owner",
|
|
40
|
-
"scope": "Repository governance owner",
|
|
41
|
-
"support": "Synthetic support owner"
|
|
42
|
-
},
|
|
43
|
-
"provenance": {
|
|
44
|
-
"debt_resolved": false,
|
|
45
|
-
"source": "Synthetic fixture only"
|
|
46
|
-
},
|
|
47
|
-
"review_independence": "single_account",
|
|
48
|
-
"rollback": {
|
|
49
|
-
"action": "Keep the correction deferred or revert it if regression evidence fails.",
|
|
50
|
-
"triggers": ["Regression evidence fails or compatibility review finds an unsupported impact."]
|
|
51
|
-
},
|
|
52
|
-
"schema_version": "1.0",
|
|
53
|
-
"scope": {
|
|
54
|
-
"aesthetic": false,
|
|
55
|
-
"kind": "normative_correctness",
|
|
56
|
-
"summary": "Demonstrate the adoption-count bypass without waiving regression or lifecycle duties."
|
|
57
|
-
},
|
|
58
|
-
"stable_scope_decision": false,
|
|
59
|
-
"support": {
|
|
60
|
-
"capacity": "committed",
|
|
61
|
-
"status": "active"
|
|
62
|
-
},
|
|
63
|
-
"transition": {
|
|
64
|
-
"from": "consumer_local",
|
|
65
|
-
"to": "shared_experimental"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"color": {
|
|
3
|
-
"$type": "color",
|
|
4
|
-
"line": { "$value": { "colorSpace": "srgb", "components": [0.2, 0.2, 0.2] } }
|
|
5
|
-
},
|
|
6
|
-
"size": {
|
|
7
|
-
"$type": "dimension",
|
|
8
|
-
"line": { "$value": { "value": 1, "unit": "px" } }
|
|
9
|
-
},
|
|
10
|
-
"border": {
|
|
11
|
-
"$type": "border",
|
|
12
|
-
"default": { "$value": { "color": "{color.line}", "style": "solid", "width": "{size.line}" } }
|
|
13
|
-
}
|
|
14
|
-
}
|