@12ui/design 0.2.35 → 0.2.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/SKILL.md +1 -1
  2. package/dist/branch-client.d.ts +12 -0
  3. package/dist/branch-client.d.ts.map +1 -1
  4. package/dist/branch-client.js.map +1 -1
  5. package/dist/branch-completion.d.ts +4 -4
  6. package/dist/branch-completion.d.ts.map +1 -1
  7. package/dist/branch-completion.js +18 -7
  8. package/dist/branch-completion.js.map +1 -1
  9. package/dist/branch-execution-types.d.ts +3 -0
  10. package/dist/branch-execution-types.d.ts.map +1 -1
  11. package/dist/branch-execution.d.ts.map +1 -1
  12. package/dist/branch-execution.js +13 -0
  13. package/dist/branch-execution.js.map +1 -1
  14. package/dist/branch-identity.d.ts +1 -1
  15. package/dist/branch-identity.js +1 -1
  16. package/dist/branch-page-conversion.d.ts.map +1 -1
  17. package/dist/branch-page-conversion.js +27 -6
  18. package/dist/branch-page-conversion.js.map +1 -1
  19. package/dist/branch-plan.d.ts +3 -1
  20. package/dist/branch-plan.d.ts.map +1 -1
  21. package/dist/branch-plan.js +2 -0
  22. package/dist/branch-plan.js.map +1 -1
  23. package/dist/branch-run-record.d.ts +59 -1
  24. package/dist/branch-run-record.d.ts.map +1 -1
  25. package/dist/branch-run-record.js.map +1 -1
  26. package/dist/branch-winner.d.ts.map +1 -1
  27. package/dist/branch-winner.js +7 -0
  28. package/dist/branch-winner.js.map +1 -1
  29. package/dist/cli-branch-command.d.ts +4 -0
  30. package/dist/cli-branch-command.d.ts.map +1 -1
  31. package/dist/cli-branch-command.js +74 -13
  32. package/dist/cli-branch-command.js.map +1 -1
  33. package/dist/cli-help/design.d.ts +1 -1
  34. package/dist/cli-help/design.d.ts.map +1 -1
  35. package/dist/cli-help/design.js +1 -0
  36. package/dist/cli-help/design.js.map +1 -1
  37. package/dist/cli-help/index.d.ts +1 -1
  38. package/dist/cli-package-command.js +7 -7
  39. package/dist/cli-package-command.js.map +1 -1
  40. package/dist/cli-prototype-command.d.ts +3 -2
  41. package/dist/cli-prototype-command.d.ts.map +1 -1
  42. package/dist/cli-prototype-command.js +9 -3
  43. package/dist/cli-prototype-command.js.map +1 -1
  44. package/dist/cli-review-command.js +2 -2
  45. package/dist/cli-review-command.js.map +1 -1
  46. package/dist/conversion-problems.d.ts +1 -1
  47. package/dist/conversion-problems.d.ts.map +1 -1
  48. package/dist/conversion-problems.js +1 -0
  49. package/dist/conversion-problems.js.map +1 -1
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +2 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/package-client.d.ts +19 -1
  55. package/dist/package-client.d.ts.map +1 -1
  56. package/dist/package-client.js.map +1 -1
  57. package/dist/package-submission.d.ts +32 -1
  58. package/dist/package-submission.d.ts.map +1 -1
  59. package/dist/package-submission.js +41 -7
  60. package/dist/package-submission.js.map +1 -1
  61. package/dist/prototype-branch-contract.d.ts +67 -0
  62. package/dist/prototype-branch-contract.d.ts.map +1 -0
  63. package/dist/prototype-branch-contract.js +403 -0
  64. package/dist/prototype-branch-contract.js.map +1 -0
  65. package/dist/prototype-poststep.d.ts +27 -0
  66. package/dist/prototype-poststep.d.ts.map +1 -0
  67. package/dist/prototype-poststep.js +97 -0
  68. package/dist/prototype-poststep.js.map +1 -0
  69. package/dist/prototype-run-record.d.ts +92 -0
  70. package/dist/prototype-run-record.d.ts.map +1 -0
  71. package/dist/prototype-run-record.js +236 -0
  72. package/dist/prototype-run-record.js.map +1 -0
  73. package/dist/prototype-runner.d.ts +13 -1
  74. package/dist/prototype-runner.d.ts.map +1 -1
  75. package/dist/prototype-runner.js +79 -20
  76. package/dist/prototype-runner.js.map +1 -1
  77. package/open-design.json +2 -2
  78. package/package.json +1 -1
  79. package/prototype-kit/analyze.mjs +48 -6
  80. package/prototype-kit/build.mjs +249 -65
  81. package/prototype-kit/inventory.mjs +290 -2
  82. package/prototype-kit/lib/holding-composition.mjs +67 -0
  83. package/prototype-kit/lib/nav-active-state.mjs +67 -0
  84. package/prototype-kit/lib/review-framing.mjs +72 -0
  85. package/prototype-kit/lib/runtime-check.mjs +361 -28
  86. package/prototype-kit/lib/shell-consistency.mjs +68 -0
  87. package/prototype-kit/lib/shell-stitching.mjs +221 -0
  88. package/prototype-kit/runtime/proto.css +8 -3
  89. package/prototype-kit/tests/README.md +4 -1
  90. package/prototype-kit/tests/adversarial-runtime.mjs +85 -2
  91. package/prototype-kit/tests/fixtures/holding-runtime/PROVENANCE.md +22 -0
  92. package/prototype-kit/tests/fixtures/holding-runtime/band-ownership-fire.html +10 -0
  93. package/prototype-kit/tests/fixtures/holding-runtime/band-ownership-silent.html +10 -0
  94. package/prototype-kit/tests/fixtures/holding-runtime/declared-width-fire.html +11 -0
  95. package/prototype-kit/tests/fixtures/holding-runtime/declared-width-silent.html +11 -0
  96. package/prototype-kit/tests/fixtures/holding-runtime/ground-registration-mismatch-fire.html +5 -0
  97. package/prototype-kit/tests/fixtures/holding-runtime/ground-registration-mismatch-silent.html +5 -0
  98. package/prototype-kit/tests/fixtures/holding-runtime/holding-contrast-fire.html +5 -0
  99. package/prototype-kit/tests/fixtures/holding-runtime/holding-contrast-silent.html +5 -0
  100. package/prototype-kit/tests/fixtures/holding-runtime/positioned-ground-fire.html +5 -0
  101. package/prototype-kit/tests/fixtures/holding-runtime/positioned-ground-silent.html +5 -0
  102. package/prototype-kit/tests/fixtures/holding-runtime/shell-geometry-fire.html +5 -0
  103. package/prototype-kit/tests/fixtures/holding-runtime/shell-geometry-silent.html +5 -0
  104. package/prototype-kit/tests/fixtures/holding-runtime/shell-intersection-fire.html +5 -0
  105. package/prototype-kit/tests/fixtures/holding-runtime/shell-intersection-silent.html +5 -0
  106. package/prototype-kit/tests/fixtures/runtime/history.html +1 -1
  107. package/prototype-kit/tests/fixtures/shell-nav-runtime/PROVENANCE.md +6 -0
  108. package/prototype-kit/tests/fixtures/shell-nav-runtime/active-fire.html +3 -0
  109. package/prototype-kit/tests/fixtures/shell-nav-runtime/proto-manifest.json +20 -0
  110. package/prototype-kit/tests/fixtures/shell-nav-runtime/shell-fire.html +3 -0
  111. package/prototype-kit/tests/fixtures/shell-nav-runtime/shell-silent.html +3 -0
  112. package/prototype-kit/tests/fixtures/shell-nav-runtime/unlinked-silent.html +3 -0
  113. package/prototype-kit/tests/fixtures/three-shell/pages/p0-home.html +3 -3
  114. package/prototype-kit/tests/fixtures/three-shell/pages/p1-reports.html +3 -3
  115. package/prototype-kit/tests/lib/run-process.mjs +8 -2
  116. package/prototype-kit/tests/offline-check.mjs +143 -0
  117. package/prototype-kit/tests/population-sweep.mjs +26 -7
  118. package/prototype-kit/tests/rules-check.mjs +80 -0
  119. package/prototype-kit/verify-runtime.mjs +5 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * The prototype post-step is deliberately recorded separately from the branch
3
+ * run. A branch can be settled while this optional derived artifact is still
4
+ * running, failed, or ready to retry.
5
+ */
6
+ export declare const PROTOTYPE_STATUS_FILENAME = "prototype.status.json";
7
+ type PrototypeRunRecordBase = {
8
+ version: 1;
9
+ runId: string;
10
+ inputDigest: string;
11
+ attempt: number;
12
+ startedAt: string;
13
+ updatedAt: string;
14
+ };
15
+ export type PrototypeRunError = {
16
+ name: string;
17
+ message: string;
18
+ stack?: string;
19
+ };
20
+ export type PrototypeRunningRunRecord = PrototypeRunRecordBase & {
21
+ status: 'running';
22
+ };
23
+ export type PrototypeSucceededRunRecord = PrototypeRunRecordBase & {
24
+ status: 'succeeded';
25
+ manifestPath: string;
26
+ };
27
+ export type PrototypeFailedRunRecord = PrototypeRunRecordBase & {
28
+ status: 'failed';
29
+ error: PrototypeRunError;
30
+ };
31
+ export type PrototypeSkippedRunRecord = PrototypeRunRecordBase & {
32
+ status: 'skipped';
33
+ reason: string;
34
+ detail?: string;
35
+ };
36
+ export type PrototypeRunRecord = PrototypeRunningRunRecord | PrototypeSucceededRunRecord | PrototypeFailedRunRecord | PrototypeSkippedRunRecord;
37
+ export type PrototypeRunResolution = {
38
+ action: 'retry';
39
+ reason: 'missing' | 'input-changed' | 'running' | 'failed' | 'manifest-missing';
40
+ record?: PrototypeRunRecord;
41
+ } | {
42
+ action: 'settled';
43
+ reason: 'legacy-manifest' | 'succeeded' | 'skipped';
44
+ adoptable: boolean;
45
+ manifestPath?: string;
46
+ record?: PrototypeRunRecord;
47
+ };
48
+ export declare const prototypeStatusPath: (branchDir: string) => string;
49
+ export declare const readPrototypeRunRecord: (branchDir: string) => Promise<PrototypeRunRecord | undefined>;
50
+ /**
51
+ * A synced temporary inode is renamed over the destination, then the parent
52
+ * directory is synced. Readers therefore see the previous whole record or the
53
+ * next whole record, and the rename survives a process or machine interruption.
54
+ */
55
+ export declare const writePrototypeRunRecord: (branchDir: string, record: PrototypeRunRecord) => Promise<void>;
56
+ export declare const startPrototypeRunRecord: (args: {
57
+ branchDir: string;
58
+ runId: string;
59
+ inputDigest: string;
60
+ now?: () => Date;
61
+ }) => Promise<PrototypeRunningRunRecord>;
62
+ export declare const succeedPrototypeRunRecord: (args: {
63
+ branchDir: string;
64
+ running: PrototypeRunningRunRecord;
65
+ manifestPath: string;
66
+ now?: () => Date;
67
+ }) => Promise<PrototypeSucceededRunRecord>;
68
+ export declare const failPrototypeRunRecord: (args: {
69
+ branchDir: string;
70
+ running: PrototypeRunningRunRecord;
71
+ error: unknown;
72
+ now?: () => Date;
73
+ }) => Promise<PrototypeFailedRunRecord>;
74
+ export declare const skipPrototypeRunRecord: (args: {
75
+ branchDir: string;
76
+ running: PrototypeRunningRunRecord;
77
+ reason: string;
78
+ detail?: string;
79
+ now?: () => Date;
80
+ }) => Promise<PrototypeSkippedRunRecord>;
81
+ /**
82
+ * Decide whether a caller can adopt a settled prototype or must run it again.
83
+ * A legacy manifest remains adoptable only while no sidecar exists; once a
84
+ * sidecar exists, its digest and status are authoritative.
85
+ */
86
+ export declare const resolvePrototypeRunRecord: (args: {
87
+ branchDir: string;
88
+ inputDigest: string;
89
+ legacyManifestPath: string;
90
+ }) => Promise<PrototypeRunResolution>;
91
+ export {};
92
+ //# sourceMappingURL=prototype-run-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prototype-run-record.d.ts","sourceRoot":"","sources":["../src/prototype-run-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, open, readFile, rename, rm, stat } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ /**
5
+ * The prototype post-step is deliberately recorded separately from the branch
6
+ * run. A branch can be settled while this optional derived artifact is still
7
+ * running, failed, or ready to retry.
8
+ */
9
+ export const PROTOTYPE_STATUS_FILENAME = 'prototype.status.json';
10
+ export const prototypeStatusPath = (branchDir) => (path.join(branchDir, PROTOTYPE_STATUS_FILENAME));
11
+ const invalidRecord = (file) => new Error(`Invalid prototype status record: ${file}`);
12
+ const nonEmptyString = (value) => (typeof value === 'string' && value.trim().length > 0);
13
+ const parsePrototypeRunRecord = (source, file) => {
14
+ let parsed;
15
+ try {
16
+ parsed = JSON.parse(source);
17
+ }
18
+ catch (error) {
19
+ throw new Error(`Invalid prototype status record: ${file}`, { cause: error });
20
+ }
21
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
22
+ throw invalidRecord(file);
23
+ }
24
+ const value = parsed;
25
+ if (value.version !== 1
26
+ || !nonEmptyString(value.runId)
27
+ || !nonEmptyString(value.inputDigest)
28
+ || !Number.isSafeInteger(value.attempt)
29
+ || value.attempt < 1
30
+ || !nonEmptyString(value.startedAt)
31
+ || !Number.isFinite(Date.parse(value.startedAt))
32
+ || !nonEmptyString(value.updatedAt)
33
+ || !Number.isFinite(Date.parse(value.updatedAt))) {
34
+ throw invalidRecord(file);
35
+ }
36
+ const base = {
37
+ version: 1,
38
+ runId: value.runId,
39
+ inputDigest: value.inputDigest,
40
+ attempt: value.attempt,
41
+ startedAt: value.startedAt,
42
+ updatedAt: value.updatedAt,
43
+ };
44
+ switch (value.status) {
45
+ case 'running':
46
+ return { ...base, status: 'running' };
47
+ case 'succeeded':
48
+ if (!nonEmptyString(value.manifestPath))
49
+ throw invalidRecord(file);
50
+ return { ...base, status: 'succeeded', manifestPath: value.manifestPath };
51
+ case 'failed': {
52
+ if (value.error === null || typeof value.error !== 'object' || Array.isArray(value.error)) {
53
+ throw invalidRecord(file);
54
+ }
55
+ const error = value.error;
56
+ if (!nonEmptyString(error.name)
57
+ || !nonEmptyString(error.message)
58
+ || (error.stack !== undefined && typeof error.stack !== 'string')) {
59
+ throw invalidRecord(file);
60
+ }
61
+ return {
62
+ ...base,
63
+ status: 'failed',
64
+ error: {
65
+ name: error.name,
66
+ message: error.message,
67
+ ...(typeof error.stack === 'string' ? { stack: error.stack } : {}),
68
+ },
69
+ };
70
+ }
71
+ case 'skipped':
72
+ if (!nonEmptyString(value.reason)
73
+ || (value.detail !== undefined && typeof value.detail !== 'string')) {
74
+ throw invalidRecord(file);
75
+ }
76
+ return {
77
+ ...base,
78
+ status: 'skipped',
79
+ reason: value.reason,
80
+ ...(typeof value.detail === 'string' ? { detail: value.detail } : {}),
81
+ };
82
+ default:
83
+ throw invalidRecord(file);
84
+ }
85
+ };
86
+ export const readPrototypeRunRecord = async (branchDir) => {
87
+ const file = prototypeStatusPath(branchDir);
88
+ let source;
89
+ try {
90
+ source = await readFile(file, 'utf8');
91
+ }
92
+ catch (error) {
93
+ if (error.code === 'ENOENT')
94
+ return undefined;
95
+ throw error;
96
+ }
97
+ return parsePrototypeRunRecord(source, file);
98
+ };
99
+ /**
100
+ * A synced temporary inode is renamed over the destination, then the parent
101
+ * directory is synced. Readers therefore see the previous whole record or the
102
+ * next whole record, and the rename survives a process or machine interruption.
103
+ */
104
+ export const writePrototypeRunRecord = async (branchDir, record) => {
105
+ const file = prototypeStatusPath(branchDir);
106
+ const parent = path.dirname(file);
107
+ await mkdir(parent, { recursive: true });
108
+ const temporary = path.join(parent, `.${PROTOTYPE_STATUS_FILENAME}.${randomUUID()}.tmp`);
109
+ let temporaryHandle;
110
+ try {
111
+ temporaryHandle = await open(temporary, 'wx', 0o600);
112
+ await temporaryHandle.writeFile(`${JSON.stringify(record, null, 2)}\n`, 'utf8');
113
+ await temporaryHandle.sync();
114
+ await temporaryHandle.close();
115
+ temporaryHandle = undefined;
116
+ await rename(temporary, file);
117
+ const directoryHandle = await open(parent, 'r');
118
+ try {
119
+ await directoryHandle.sync();
120
+ }
121
+ finally {
122
+ await directoryHandle.close();
123
+ }
124
+ }
125
+ finally {
126
+ await temporaryHandle?.close();
127
+ await rm(temporary, { force: true });
128
+ }
129
+ };
130
+ const timestamp = (now) => (now ?? (() => new Date()))().toISOString();
131
+ export const startPrototypeRunRecord = async (args) => {
132
+ const previous = await readPrototypeRunRecord(args.branchDir);
133
+ const startedAt = timestamp(args.now);
134
+ const record = {
135
+ version: 1,
136
+ status: 'running',
137
+ runId: args.runId,
138
+ inputDigest: args.inputDigest,
139
+ attempt: previous?.runId === args.runId && previous.inputDigest === args.inputDigest
140
+ ? previous.attempt + 1
141
+ : 1,
142
+ startedAt,
143
+ updatedAt: startedAt,
144
+ };
145
+ await writePrototypeRunRecord(args.branchDir, record);
146
+ return record;
147
+ };
148
+ const updatedRecordBase = (running, now) => ({
149
+ version: 1,
150
+ runId: running.runId,
151
+ inputDigest: running.inputDigest,
152
+ attempt: running.attempt,
153
+ startedAt: running.startedAt,
154
+ updatedAt: timestamp(now),
155
+ });
156
+ export const succeedPrototypeRunRecord = async (args) => {
157
+ const record = {
158
+ ...updatedRecordBase(args.running, args.now),
159
+ status: 'succeeded',
160
+ manifestPath: args.manifestPath,
161
+ };
162
+ await writePrototypeRunRecord(args.branchDir, record);
163
+ return record;
164
+ };
165
+ const durableError = (error) => {
166
+ if (error instanceof Error) {
167
+ return {
168
+ name: error.name,
169
+ message: error.message,
170
+ ...(error.stack ? { stack: error.stack } : {}),
171
+ };
172
+ }
173
+ return { name: 'Error', message: String(error) };
174
+ };
175
+ export const failPrototypeRunRecord = async (args) => {
176
+ const record = {
177
+ ...updatedRecordBase(args.running, args.now),
178
+ status: 'failed',
179
+ error: durableError(args.error),
180
+ };
181
+ await writePrototypeRunRecord(args.branchDir, record);
182
+ return record;
183
+ };
184
+ export const skipPrototypeRunRecord = async (args) => {
185
+ const record = {
186
+ ...updatedRecordBase(args.running, args.now),
187
+ status: 'skipped',
188
+ reason: args.reason,
189
+ ...(args.detail === undefined ? {} : { detail: args.detail }),
190
+ };
191
+ await writePrototypeRunRecord(args.branchDir, record);
192
+ return record;
193
+ };
194
+ const fileExists = async (file) => {
195
+ try {
196
+ return (await stat(file)).isFile();
197
+ }
198
+ catch (error) {
199
+ if (error.code === 'ENOENT')
200
+ return false;
201
+ throw error;
202
+ }
203
+ };
204
+ const fromBranchRoot = (branchDir, file) => (path.isAbsolute(file) ? file : path.join(branchDir, file));
205
+ /**
206
+ * Decide whether a caller can adopt a settled prototype or must run it again.
207
+ * A legacy manifest remains adoptable only while no sidecar exists; once a
208
+ * sidecar exists, its digest and status are authoritative.
209
+ */
210
+ export const resolvePrototypeRunRecord = async (args) => {
211
+ const record = await readPrototypeRunRecord(args.branchDir);
212
+ if (!record) {
213
+ const manifestPath = fromBranchRoot(args.branchDir, args.legacyManifestPath);
214
+ return await fileExists(manifestPath)
215
+ ? { action: 'settled', reason: 'legacy-manifest', adoptable: true, manifestPath }
216
+ : { action: 'retry', reason: 'missing' };
217
+ }
218
+ if (record.inputDigest !== args.inputDigest) {
219
+ return { action: 'retry', reason: 'input-changed', record };
220
+ }
221
+ switch (record.status) {
222
+ case 'succeeded': {
223
+ const manifestPath = fromBranchRoot(args.branchDir, record.manifestPath);
224
+ return await fileExists(manifestPath)
225
+ ? { action: 'settled', reason: 'succeeded', adoptable: true, manifestPath, record }
226
+ : { action: 'retry', reason: 'manifest-missing', record };
227
+ }
228
+ case 'skipped':
229
+ return { action: 'settled', reason: 'skipped', adoptable: false, record };
230
+ case 'running':
231
+ return { action: 'retry', reason: 'running', record };
232
+ case 'failed':
233
+ return { action: 'retry', reason: 'failed', record };
234
+ }
235
+ };
236
+ //# sourceMappingURL=prototype-run-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prototype-run-record.js","sourceRoot":"","sources":["../src/prototype-run-record.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import type { TwelveUiPrototypeLabelClient } from './prototype-label-client.js';
2
+ import { type PrototypeBranchContract } from './prototype-branch-contract.js';
2
3
  import { type PrototypeStageResult } from './prototype-process.js';
3
4
  export declare const PROTOTYPE_MANIFEST_FILENAME = "proto-manifest.json";
4
5
  export declare const PROTOTYPE_DIRECTORY = "prototype";
5
6
  export declare const PROTOTYPE_WORK_DIRECTORY = ".prototype-work";
6
- export declare const PROTOTYPE_PIPELINE_REVISION = "prototype-v2";
7
+ export declare const PROTOTYPE_PIPELINE_REVISION = "prototype-v3";
7
8
  export type PrototypeRunResult = {
8
9
  branchDir: string;
9
10
  outputDir: string;
@@ -14,8 +15,19 @@ export type PrototypeRunResult = {
14
15
  labelCostMicros: number;
15
16
  warnings: string[];
16
17
  };
18
+ export declare class PrototypeNavigationSkippedError extends Error {
19
+ readonly reason: 'prototype_navigation_unreconciled' | 'prototype_navigation_no_survivors';
20
+ readonly detail: string;
21
+ constructor(args: {
22
+ reason: PrototypeNavigationSkippedError['reason'];
23
+ detail: string;
24
+ });
25
+ }
17
26
  export declare const runPrototypePipeline: (args: {
18
27
  branchDir: string;
28
+ contract?: Exclude<PrototypeBranchContract, {
29
+ mode: "skip";
30
+ }>;
19
31
  environment?: NodeJS.ProcessEnv;
20
32
  homeDirectory?: string;
21
33
  labelClient?: TwelveUiPrototypeLabelClient;
@@ -1 +1 @@
1
- {"version":3,"file":"prototype-runner.d.ts","sourceRoot":"","sources":["../src/prototype-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAIhF,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAItF,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AACjE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAC1D,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAOF,eAAO,MAAM,oBAAoB,GAAU,MAAM;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAG,OAAO,CAAC,kBAAkB,CAqK7B,CAAC"}
1
+ {"version":3,"file":"prototype-runner.d.ts","sourceRoot":"","sources":["../src/prototype-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAUtF,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AACjE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAC1D,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,MAAM,EAAE,mCAAmC,GAAG,mCAAmC,CAAC;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE;QAChB,MAAM,EAAE,+BAA+B,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,EAAE,MAAM,CAAC;KAChB;CAMF;AAOD,eAAO,MAAM,oBAAoB,GAAU,MAAM;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC,uBAAuB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAG,OAAO,CAAC,kBAAkB,CA2N7B,CAAC"}
@@ -2,20 +2,47 @@ import { randomUUID } from 'node:crypto';
2
2
  import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
+ import { resolvePrototypeBranchContract, } from './prototype-branch-contract.js';
5
6
  import { resolvePrototypeBrowserProvisioning } from './prototype-browsers.js';
6
7
  import { evaluatePrototypeGates } from './prototype-gates.js';
7
8
  import { prototypeLabelRequests } from './prototype-requests.js';
8
9
  import { runPrototypeStage } from './prototype-process.js';
10
+ import { failPrototypeRunRecord, skipPrototypeRunRecord, startPrototypeRunRecord, succeedPrototypeRunRecord, } from './prototype-run-record.js';
9
11
  import { prototypeSourceDirectory } from './prototype-source.js';
10
12
  import { BRANCH_COMPLETION_FILENAME, BRANCH_PLAN_FILENAME } from './branch-run-record.js';
11
13
  export const PROTOTYPE_MANIFEST_FILENAME = 'proto-manifest.json';
12
14
  export const PROTOTYPE_DIRECTORY = 'prototype';
13
15
  export const PROTOTYPE_WORK_DIRECTORY = '.prototype-work';
14
- export const PROTOTYPE_PIPELINE_REVISION = 'prototype-v2';
16
+ export const PROTOTYPE_PIPELINE_REVISION = 'prototype-v3';
17
+ export class PrototypeNavigationSkippedError extends Error {
18
+ reason;
19
+ detail;
20
+ constructor(args) {
21
+ super(`Prototype skipped (${args.reason}): ${args.detail}`);
22
+ this.name = 'PrototypeNavigationSkippedError';
23
+ this.reason = args.reason;
24
+ this.detail = args.detail;
25
+ }
26
+ }
15
27
  const kitDirectory = () => path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../prototype-kit');
16
28
  export const runPrototypePipeline = async (args) => {
17
29
  const branchDir = path.resolve(args.branchDir);
18
30
  const sourceDir = await prototypeSourceDirectory(branchDir);
31
+ const contract = args.contract ?? await resolvePrototypeBranchContract({ branchDir, sourceDir });
32
+ const running = await startPrototypeRunRecord({
33
+ branchDir,
34
+ runId: contract.runId || 'unresolved',
35
+ inputDigest: contract.inputDigest,
36
+ });
37
+ if (contract.mode === 'skip') {
38
+ await skipPrototypeRunRecord({
39
+ branchDir,
40
+ running,
41
+ reason: contract.reason,
42
+ detail: contract.detail,
43
+ });
44
+ throw new PrototypeNavigationSkippedError(contract);
45
+ }
19
46
  const planPath = path.join(sourceDir, BRANCH_PLAN_FILENAME);
20
47
  const completionPath = path.join(branchDir, BRANCH_COMPLETION_FILENAME);
21
48
  const completion = JSON.parse(await readFile(completionPath, 'utf8'));
@@ -29,18 +56,22 @@ export const runPrototypePipeline = async (args) => {
29
56
  const modelFile = path.join(workDir, 'model.json');
30
57
  const runtimeAuditFile = path.join(workDir, 'runtime-audit.json');
31
58
  const gateAuditFile = path.join(workDir, 'gate-audit.json');
59
+ const reviewFile = path.join(workDir, 'review.json');
32
60
  const stagingDir = path.join(branchDir, `.prototype-${randomUUID()}.tmp`);
33
61
  const outputDir = path.join(branchDir, PROTOTYPE_DIRECTORY);
34
- const browserProvisioning = await resolvePrototypeBrowserProvisioning({
35
- ...(args.environment ? { environment: args.environment } : {}),
36
- ...(args.homeDirectory ? { homeDirectory: args.homeDirectory } : {}),
37
- ...(args.platform ? { platform: args.platform } : {}),
38
- });
39
62
  await rm(workDir, { recursive: true, force: true });
40
63
  await mkdir(labelsDir, { recursive: true });
41
64
  await mkdir(stagingDir, { recursive: true });
42
65
  const stages = [];
43
66
  try {
67
+ const browserProvisioning = await resolvePrototypeBrowserProvisioning({
68
+ ...(args.environment ? { environment: args.environment } : {}),
69
+ ...(args.homeDirectory ? { homeDirectory: args.homeDirectory } : {}),
70
+ ...(args.platform ? { platform: args.platform } : {}),
71
+ });
72
+ if (contract.mode === 'review') {
73
+ await writeFile(reviewFile, `${JSON.stringify(contract.review, null, 2)}\n`);
74
+ }
44
75
  stages.push(await runPrototypeStage({
45
76
  stage: 'inventory',
46
77
  script: path.join(kit, 'inventory.mjs'),
@@ -52,7 +83,7 @@ export const runPrototypePipeline = async (args) => {
52
83
  stages.push(await runPrototypeStage({
53
84
  stage: 'analyze',
54
85
  script: path.join(kit, 'analyze.mjs'),
55
- argv: [inventoryFile, modelFile],
86
+ argv: [inventoryFile, modelFile, ...(contract.mode === 'review' ? [reviewFile] : [])],
56
87
  workDir,
57
88
  browserProvisioning,
58
89
  ...(args.signal ? { signal: args.signal } : {}),
@@ -89,19 +120,30 @@ export const runPrototypePipeline = async (args) => {
89
120
  const kitManifest = JSON.parse(await readFile(manifestPath, 'utf8'));
90
121
  const inventory = JSON.parse(await readFile(inventoryFile, 'utf8'));
91
122
  const runtimeAudit = JSON.parse(await readFile(runtimeAuditFile, 'utf8'));
123
+ const viewportWidths = [...new Set(runtimeAudit.pages.flatMap((page) => (page.viewports?.map((viewport) => viewport.width).filter((width) => Number.isFinite(width)) || [])))].sort((left, right) => left - right);
92
124
  const evaluation = evaluatePrototypeGates(kitManifest);
93
- const planStatus = Array.isArray(inventory.plan?.pages) && Array.isArray(inventory.plan?.screens)
94
- ? 'passed'
95
- : 'accepted-partial';
125
+ const planStatus = contract.mode === 'review'
126
+ ? 'accepted-partial'
127
+ : Array.isArray(inventory.plan?.pages) && Array.isArray(inventory.plan?.screens)
128
+ ? 'passed'
129
+ : 'accepted-partial';
130
+ const reviewStatus = (failed) => (failed && contract.mode === 'review' ? 'accepted-partial' : failed ? 'failed' : 'passed');
96
131
  const gates = {
97
132
  exportedHtml: 'passed',
98
133
  branchPlan: planStatus,
99
134
  semanticViewportSections: 'passed',
100
135
  runtime: 'passed',
101
- zeroActionRealPages: evaluation.facts.zeroActionRealPages.length > 0 ? 'failed' : 'passed',
102
- dropdownValidity: evaluation.facts.invalidDropdowns > 0 ? 'failed' : 'passed',
103
- holdingRatio: evaluation.facts.holdingRatio > 0.5 ? 'failed' : 'passed',
136
+ shellConsistency: runtimeAudit.shellConsistencyFailures.length > 0 ? 'failed' : 'passed',
137
+ activeNavigation: runtimeAudit.activeNavigationFailures.length > 0 ? 'failed' : 'passed',
138
+ zeroActionRealPages: reviewStatus(evaluation.facts.zeroActionRealPages.length > 0),
139
+ dropdownValidity: reviewStatus(evaluation.facts.invalidDropdowns > 0),
140
+ holdingRatio: reviewStatus(evaluation.facts.holdingRatio > 0.5),
104
141
  };
142
+ const reviewFindings = contract.mode === 'review' ? evaluation.blockers : [];
143
+ const blockers = contract.mode === 'review' ? [] : evaluation.blockers;
144
+ const warnings = contract.mode === 'review'
145
+ ? [...evaluation.warnings, ...reviewFindings]
146
+ : evaluation.warnings;
105
147
  await writeFile(gateAuditFile, `${JSON.stringify({
106
148
  version: 1,
107
149
  revision: PROTOTYPE_PIPELINE_REVISION,
@@ -112,11 +154,16 @@ export const runPrototypePipeline = async (args) => {
112
154
  },
113
155
  gates,
114
156
  facts: evaluation.facts,
115
- warnings: evaluation.warnings,
116
- blockers: evaluation.blockers,
157
+ warnings,
158
+ blockers,
159
+ ...(reviewFindings.length > 0 ? { reviewFindings } : {}),
117
160
  }, null, 2)}\n`);
118
- if (evaluation.blockers.length > 0) {
119
- throw new Error(`Prototype product gate failed: ${evaluation.blockers.join(' ')}`);
161
+ if (blockers.length > 0) {
162
+ throw new Error(`Prototype product gate failed: ${blockers.join(' ')}`);
163
+ }
164
+ if (contract.mode === 'review'
165
+ && JSON.stringify(kitManifest.review) !== JSON.stringify(contract.review)) {
166
+ throw new Error('Prototype review contract changed between input reconciliation and build.');
120
167
  }
121
168
  await writeFile(manifestPath, `${JSON.stringify({
122
169
  ...kitManifest,
@@ -143,14 +190,19 @@ export const runPrototypePipeline = async (args) => {
143
190
  duplicateIds: runtimeAudit.duplicateIds,
144
191
  brokenTargets: runtimeAudit.brokenTargets.length,
145
192
  interactionFailures: runtimeAudit.interactionFailures,
193
+ compositionFailures: runtimeAudit.compositionFailures,
194
+ shellConsistencyFailures: runtimeAudit.shellConsistencyFailures,
195
+ activeNavigationFailures: runtimeAudit.activeNavigationFailures,
196
+ viewportWidths,
146
197
  deepLinkBack: runtimeAudit.deepLinkBack,
147
198
  },
148
199
  facts: evaluation.facts,
149
- warnings: evaluation.warnings,
200
+ warnings,
201
+ ...(reviewFindings.length > 0 ? { reviewFindings } : {}),
150
202
  }, null, 2)}\n`);
151
203
  await rm(outputDir, { recursive: true, force: true });
152
204
  await rename(stagingDir, outputDir);
153
- return {
205
+ const result = {
154
206
  branchDir,
155
207
  outputDir,
156
208
  manifestPath: path.join(outputDir, PROTOTYPE_MANIFEST_FILENAME),
@@ -158,11 +210,18 @@ export const runPrototypePipeline = async (args) => {
158
210
  screenCount: model.states.length,
159
211
  labeledScreenCount,
160
212
  labelCostMicros,
161
- warnings: evaluation.warnings,
213
+ warnings,
162
214
  };
215
+ await succeedPrototypeRunRecord({
216
+ branchDir,
217
+ running,
218
+ manifestPath: result.manifestPath,
219
+ });
220
+ return result;
163
221
  }
164
222
  catch (error) {
165
223
  await rm(stagingDir, { recursive: true, force: true });
224
+ await failPrototypeRunRecord({ branchDir, running, error });
166
225
  throw error;
167
226
  }
168
227
  };
@@ -1 +1 @@
1
- {"version":3,"file":"prototype-runner.js","sourceRoot":"","sources":["../src/prototype-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prototype-runner.js","sourceRoot":"","sources":["../src/prototype-runner.ts"],"names":[],"mappings":"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"}
package/open-design.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "specVersion": "1.0.0",
4
4
  "name": "12ui-design",
5
5
  "title": "12UI Design",
6
- "version": "0.2.35",
6
+ "version": "0.2.37",
7
7
  "description": "Explore corpus-grounded interface directions, choose one, and convert it into production-ready responsive or native artifacts with 12UI.",
8
8
  "author": {
9
9
  "name": "Just Every",
@@ -49,7 +49,7 @@
49
49
  "command": "npx",
50
50
  "args": [
51
51
  "-y",
52
- "@12ui/design@0.2.35",
52
+ "@12ui/design@0.2.37",
53
53
  "mcp"
54
54
  ]
55
55
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12ui/design",
3
- "version": "0.2.35",
3
+ "version": "0.2.37",
4
4
  "type": "module",
5
5
  "description": "The canonical 12ui CLI, SDK, MCP server, and visual interface design skills",
6
6
  "main": "dist/index.js",