@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.
- package/SKILL.md +1 -1
- package/dist/branch-client.d.ts +12 -0
- package/dist/branch-client.d.ts.map +1 -1
- package/dist/branch-client.js.map +1 -1
- package/dist/branch-completion.d.ts +4 -4
- package/dist/branch-completion.d.ts.map +1 -1
- package/dist/branch-completion.js +18 -7
- package/dist/branch-completion.js.map +1 -1
- package/dist/branch-execution-types.d.ts +3 -0
- package/dist/branch-execution-types.d.ts.map +1 -1
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +13 -0
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-identity.d.ts +1 -1
- package/dist/branch-identity.js +1 -1
- package/dist/branch-page-conversion.d.ts.map +1 -1
- package/dist/branch-page-conversion.js +27 -6
- package/dist/branch-page-conversion.js.map +1 -1
- package/dist/branch-plan.d.ts +3 -1
- package/dist/branch-plan.d.ts.map +1 -1
- package/dist/branch-plan.js +2 -0
- package/dist/branch-plan.js.map +1 -1
- package/dist/branch-run-record.d.ts +59 -1
- package/dist/branch-run-record.d.ts.map +1 -1
- package/dist/branch-run-record.js.map +1 -1
- package/dist/branch-winner.d.ts.map +1 -1
- package/dist/branch-winner.js +7 -0
- package/dist/branch-winner.js.map +1 -1
- package/dist/cli-branch-command.d.ts +4 -0
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +74 -13
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-help/design.d.ts +1 -1
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +1 -0
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +1 -1
- package/dist/cli-package-command.js +7 -7
- package/dist/cli-package-command.js.map +1 -1
- package/dist/cli-prototype-command.d.ts +3 -2
- package/dist/cli-prototype-command.d.ts.map +1 -1
- package/dist/cli-prototype-command.js +9 -3
- package/dist/cli-prototype-command.js.map +1 -1
- package/dist/cli-review-command.js +2 -2
- package/dist/cli-review-command.js.map +1 -1
- package/dist/conversion-problems.d.ts +1 -1
- package/dist/conversion-problems.d.ts.map +1 -1
- package/dist/conversion-problems.js +1 -0
- package/dist/conversion-problems.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/package-client.d.ts +19 -1
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js.map +1 -1
- package/dist/package-submission.d.ts +32 -1
- package/dist/package-submission.d.ts.map +1 -1
- package/dist/package-submission.js +41 -7
- package/dist/package-submission.js.map +1 -1
- package/dist/prototype-branch-contract.d.ts +67 -0
- package/dist/prototype-branch-contract.d.ts.map +1 -0
- package/dist/prototype-branch-contract.js +403 -0
- package/dist/prototype-branch-contract.js.map +1 -0
- package/dist/prototype-poststep.d.ts +27 -0
- package/dist/prototype-poststep.d.ts.map +1 -0
- package/dist/prototype-poststep.js +97 -0
- package/dist/prototype-poststep.js.map +1 -0
- package/dist/prototype-run-record.d.ts +92 -0
- package/dist/prototype-run-record.d.ts.map +1 -0
- package/dist/prototype-run-record.js +236 -0
- package/dist/prototype-run-record.js.map +1 -0
- package/dist/prototype-runner.d.ts +13 -1
- package/dist/prototype-runner.d.ts.map +1 -1
- package/dist/prototype-runner.js +79 -20
- package/dist/prototype-runner.js.map +1 -1
- package/open-design.json +2 -2
- package/package.json +1 -1
- package/prototype-kit/analyze.mjs +48 -6
- package/prototype-kit/build.mjs +249 -65
- package/prototype-kit/inventory.mjs +290 -2
- package/prototype-kit/lib/holding-composition.mjs +67 -0
- package/prototype-kit/lib/nav-active-state.mjs +67 -0
- package/prototype-kit/lib/review-framing.mjs +72 -0
- package/prototype-kit/lib/runtime-check.mjs +361 -28
- package/prototype-kit/lib/shell-consistency.mjs +68 -0
- package/prototype-kit/lib/shell-stitching.mjs +221 -0
- package/prototype-kit/runtime/proto.css +8 -3
- package/prototype-kit/tests/README.md +4 -1
- package/prototype-kit/tests/adversarial-runtime.mjs +85 -2
- package/prototype-kit/tests/fixtures/holding-runtime/PROVENANCE.md +22 -0
- package/prototype-kit/tests/fixtures/holding-runtime/band-ownership-fire.html +10 -0
- package/prototype-kit/tests/fixtures/holding-runtime/band-ownership-silent.html +10 -0
- package/prototype-kit/tests/fixtures/holding-runtime/declared-width-fire.html +11 -0
- package/prototype-kit/tests/fixtures/holding-runtime/declared-width-silent.html +11 -0
- package/prototype-kit/tests/fixtures/holding-runtime/ground-registration-mismatch-fire.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/ground-registration-mismatch-silent.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/holding-contrast-fire.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/holding-contrast-silent.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/positioned-ground-fire.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/positioned-ground-silent.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/shell-geometry-fire.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/shell-geometry-silent.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/shell-intersection-fire.html +5 -0
- package/prototype-kit/tests/fixtures/holding-runtime/shell-intersection-silent.html +5 -0
- package/prototype-kit/tests/fixtures/runtime/history.html +1 -1
- package/prototype-kit/tests/fixtures/shell-nav-runtime/PROVENANCE.md +6 -0
- package/prototype-kit/tests/fixtures/shell-nav-runtime/active-fire.html +3 -0
- package/prototype-kit/tests/fixtures/shell-nav-runtime/proto-manifest.json +20 -0
- package/prototype-kit/tests/fixtures/shell-nav-runtime/shell-fire.html +3 -0
- package/prototype-kit/tests/fixtures/shell-nav-runtime/shell-silent.html +3 -0
- package/prototype-kit/tests/fixtures/shell-nav-runtime/unlinked-silent.html +3 -0
- package/prototype-kit/tests/fixtures/three-shell/pages/p0-home.html +3 -3
- package/prototype-kit/tests/fixtures/three-shell/pages/p1-reports.html +3 -3
- package/prototype-kit/tests/lib/run-process.mjs +8 -2
- package/prototype-kit/tests/offline-check.mjs +143 -0
- package/prototype-kit/tests/population-sweep.mjs +26 -7
- package/prototype-kit/tests/rules-check.mjs +80 -0
- 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-
|
|
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;
|
|
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"}
|
package/dist/prototype-runner.js
CHANGED
|
@@ -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-
|
|
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 =
|
|
94
|
-
? '
|
|
95
|
-
:
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
116
|
-
blockers
|
|
157
|
+
warnings,
|
|
158
|
+
blockers,
|
|
159
|
+
...(reviewFindings.length > 0 ? { reviewFindings } : {}),
|
|
117
160
|
}, null, 2)}\n`);
|
|
118
|
-
if (
|
|
119
|
-
throw new Error(`Prototype product gate failed: ${
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
52
|
+
"@12ui/design@0.2.37",
|
|
53
53
|
"mcp"
|
|
54
54
|
]
|
|
55
55
|
}
|