codex-orchestrator 0.1.31 → 0.1.35

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 (131) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +145 -174
  3. package/dist/src/cli.js +59 -0
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/codex/command-adapter.d.ts +2 -1
  6. package/dist/src/codex/command-adapter.d.ts.map +1 -1
  7. package/dist/src/codex/command-adapter.js +13 -2
  8. package/dist/src/codex/command-adapter.js.map +1 -1
  9. package/dist/src/codex/mobile-device-guard.d.ts +7 -0
  10. package/dist/src/codex/mobile-device-guard.d.ts.map +1 -0
  11. package/dist/src/codex/mobile-device-guard.js +63 -0
  12. package/dist/src/codex/mobile-device-guard.js.map +1 -0
  13. package/dist/src/config/constants.d.ts +1 -1
  14. package/dist/src/config/constants.d.ts.map +1 -1
  15. package/dist/src/config/constants.js +1 -0
  16. package/dist/src/config/constants.js.map +1 -1
  17. package/dist/src/config/schema.d.ts +15 -2
  18. package/dist/src/config/schema.d.ts.map +1 -1
  19. package/dist/src/config/schema.js +30 -0
  20. package/dist/src/config/schema.js.map +1 -1
  21. package/dist/src/github/gh-pull-request-adapter.d.ts +1 -0
  22. package/dist/src/github/gh-pull-request-adapter.d.ts.map +1 -1
  23. package/dist/src/github/gh-pull-request-adapter.js +20 -0
  24. package/dist/src/github/gh-pull-request-adapter.js.map +1 -1
  25. package/dist/src/github/pull-requests.d.ts +2 -0
  26. package/dist/src/github/pull-requests.d.ts.map +1 -1
  27. package/dist/src/github/pull-requests.js +9 -0
  28. package/dist/src/github/pull-requests.js.map +1 -1
  29. package/dist/src/runner/acceptance-proof-runner.d.ts +54 -0
  30. package/dist/src/runner/acceptance-proof-runner.d.ts.map +1 -0
  31. package/dist/src/runner/acceptance-proof-runner.js +229 -0
  32. package/dist/src/runner/acceptance-proof-runner.js.map +1 -0
  33. package/dist/src/runner/acceptance-proof.d.ts +121 -0
  34. package/dist/src/runner/acceptance-proof.d.ts.map +1 -0
  35. package/dist/src/runner/acceptance-proof.js +405 -0
  36. package/dist/src/runner/acceptance-proof.js.map +1 -0
  37. package/dist/src/runner/android-visual-proof-command.d.ts +26 -0
  38. package/dist/src/runner/android-visual-proof-command.d.ts.map +1 -0
  39. package/dist/src/runner/android-visual-proof-command.js +598 -0
  40. package/dist/src/runner/android-visual-proof-command.js.map +1 -0
  41. package/dist/src/runner/command-utils.d.ts.map +1 -1
  42. package/dist/src/runner/command-utils.js +55 -6
  43. package/dist/src/runner/command-utils.js.map +1 -1
  44. package/dist/src/runner/completion-report.d.ts +3 -1
  45. package/dist/src/runner/completion-report.d.ts.map +1 -1
  46. package/dist/src/runner/completion-report.js +2 -1
  47. package/dist/src/runner/completion-report.js.map +1 -1
  48. package/dist/src/runner/daemon-command.d.ts.map +1 -1
  49. package/dist/src/runner/daemon-command.js +20 -0
  50. package/dist/src/runner/daemon-command.js.map +1 -1
  51. package/dist/src/runner/doctor-command.js +3 -3
  52. package/dist/src/runner/doctor-command.js.map +1 -1
  53. package/dist/src/runner/durable-run-summary.d.ts +3 -0
  54. package/dist/src/runner/durable-run-summary.d.ts.map +1 -1
  55. package/dist/src/runner/durable-run-summary.js +2 -0
  56. package/dist/src/runner/durable-run-summary.js.map +1 -1
  57. package/dist/src/runner/handoff-evidence.d.ts +5 -0
  58. package/dist/src/runner/handoff-evidence.d.ts.map +1 -1
  59. package/dist/src/runner/handoff-evidence.js +22 -0
  60. package/dist/src/runner/handoff-evidence.js.map +1 -1
  61. package/dist/src/runner/ios-visual-proof-command.d.ts +25 -0
  62. package/dist/src/runner/ios-visual-proof-command.d.ts.map +1 -0
  63. package/dist/src/runner/ios-visual-proof-command.js +355 -0
  64. package/dist/src/runner/ios-visual-proof-command.js.map +1 -0
  65. package/dist/src/runner/lifecycle-events.d.ts +1 -1
  66. package/dist/src/runner/lifecycle-events.d.ts.map +1 -1
  67. package/dist/src/runner/local-execution-session.d.ts +19 -6
  68. package/dist/src/runner/local-execution-session.d.ts.map +1 -1
  69. package/dist/src/runner/local-execution-session.js +93 -11
  70. package/dist/src/runner/local-execution-session.js.map +1 -1
  71. package/dist/src/runner/local-state.d.ts +6 -0
  72. package/dist/src/runner/local-state.d.ts.map +1 -1
  73. package/dist/src/runner/local-state.js +14 -0
  74. package/dist/src/runner/local-state.js.map +1 -1
  75. package/dist/src/runner/mobile-device-lease.d.ts +11 -0
  76. package/dist/src/runner/mobile-device-lease.d.ts.map +1 -0
  77. package/dist/src/runner/mobile-device-lease.js +121 -0
  78. package/dist/src/runner/mobile-device-lease.js.map +1 -0
  79. package/dist/src/runner/mobile-visual-proof-command.d.ts +17 -0
  80. package/dist/src/runner/mobile-visual-proof-command.d.ts.map +1 -0
  81. package/dist/src/runner/mobile-visual-proof-command.js +168 -0
  82. package/dist/src/runner/mobile-visual-proof-command.js.map +1 -0
  83. package/dist/src/runner/plan-auto-command.d.ts.map +1 -1
  84. package/dist/src/runner/plan-auto-command.js +57 -6
  85. package/dist/src/runner/plan-auto-command.js.map +1 -1
  86. package/dist/src/runner/prompt.js +2 -2
  87. package/dist/src/runner/prompt.js.map +1 -1
  88. package/dist/src/runner/recovery.d.ts +2 -1
  89. package/dist/src/runner/recovery.d.ts.map +1 -1
  90. package/dist/src/runner/recovery.js +24 -0
  91. package/dist/src/runner/recovery.js.map +1 -1
  92. package/dist/src/runner/review-gate-policy.d.ts +7 -0
  93. package/dist/src/runner/review-gate-policy.d.ts.map +1 -1
  94. package/dist/src/runner/review-gate-policy.js +81 -20
  95. package/dist/src/runner/review-gate-policy.js.map +1 -1
  96. package/dist/src/runner/review-gates.d.ts.map +1 -1
  97. package/dist/src/runner/review-gates.js +44 -11
  98. package/dist/src/runner/review-gates.js.map +1 -1
  99. package/dist/src/runner/rework-policy.d.ts +1 -0
  100. package/dist/src/runner/rework-policy.d.ts.map +1 -1
  101. package/dist/src/runner/rework-policy.js +7 -0
  102. package/dist/src/runner/rework-policy.js.map +1 -1
  103. package/dist/src/runner/scoped-auto-command.d.ts +46 -1
  104. package/dist/src/runner/scoped-auto-command.d.ts.map +1 -1
  105. package/dist/src/runner/scoped-auto-command.js +147 -47
  106. package/dist/src/runner/scoped-auto-command.js.map +1 -1
  107. package/dist/src/runner/scoped-recovery.d.ts +65 -0
  108. package/dist/src/runner/scoped-recovery.d.ts.map +1 -0
  109. package/dist/src/runner/scoped-recovery.js +484 -0
  110. package/dist/src/runner/scoped-recovery.js.map +1 -0
  111. package/dist/src/runner/status-command.d.ts.map +1 -1
  112. package/dist/src/runner/status-command.js +1 -0
  113. package/dist/src/runner/status-command.js.map +1 -1
  114. package/dist/src/runner/visual-proof-runner.d.ts +1 -0
  115. package/dist/src/runner/visual-proof-runner.d.ts.map +1 -1
  116. package/dist/src/runner/visual-proof-runner.js +144 -16
  117. package/dist/src/runner/visual-proof-runner.js.map +1 -1
  118. package/dist/src/setup/project-config.d.ts +4 -0
  119. package/dist/src/setup/project-config.d.ts.map +1 -1
  120. package/dist/src/setup/project-config.js +141 -9
  121. package/dist/src/setup/project-config.js.map +1 -1
  122. package/dist/src/setup/setup-command.d.ts.map +1 -1
  123. package/dist/src/setup/setup-command.js +2 -2
  124. package/dist/src/setup/setup-command.js.map +1 -1
  125. package/dist/src/setup/workflows.d.ts.map +1 -1
  126. package/dist/src/setup/workflows.js +5 -0
  127. package/dist/src/setup/workflows.js.map +1 -1
  128. package/docs/deep-dive.md +217 -28
  129. package/package.json +1 -1
  130. package/prompts/workflows/acceptance-proof.md +25 -0
  131. package/prompts/workflows/scoped-implementation.md +6 -2
@@ -0,0 +1,405 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { globMatches, normalizePath, uniqueSortedPaths } from '../path-policy.js';
5
+ import { scopedArtifactTypes } from './completion-report.js';
6
+ export const uiEvidenceFailureDimensions = [
7
+ 'workflow',
8
+ 'viewport',
9
+ 'freshness',
10
+ 'layout',
11
+ 'copy',
12
+ 'source-input',
13
+ ];
14
+ export async function readAcceptanceProofReport(path) {
15
+ let content = '';
16
+ try {
17
+ content = await readFile(path, 'utf8');
18
+ }
19
+ catch (error) {
20
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
21
+ return { kind: 'missing' };
22
+ }
23
+ throw error;
24
+ }
25
+ try {
26
+ const parsed = JSON.parse(content);
27
+ assertAcceptanceProofReport(parsed);
28
+ return { kind: 'valid', report: parsed };
29
+ }
30
+ catch (error) {
31
+ const message = error instanceof Error ? error.message : 'Invalid acceptance proof report';
32
+ return { kind: 'invalid', message };
33
+ }
34
+ }
35
+ export async function createAcceptanceProofDiffCapture(input) {
36
+ const beforeProofChangedFiles = uniqueSortedPaths(input.changedFiles);
37
+ const beforeProofChangedFileSet = new Set(beforeProofChangedFiles);
38
+ const beforeProofFileHashes = await snapshotFileHashes(input.worktreePath, beforeProofChangedFiles);
39
+ return {
40
+ async collectProofPhaseChangedFiles(changedFiles) {
41
+ const afterProofChangedFiles = uniqueSortedPaths(changedFiles);
42
+ return uniqueSortedPaths([
43
+ ...afterProofChangedFiles.filter((path) => !beforeProofChangedFileSet.has(path)),
44
+ ...await changedFileHashes(input.worktreePath, beforeProofFileHashes),
45
+ ]);
46
+ },
47
+ };
48
+ }
49
+ export function evaluateAcceptanceProofReport(input) {
50
+ const reasons = [];
51
+ const warnings = [...input.report.residualRisks];
52
+ if (input.report.status !== 'passed') {
53
+ reasons.push(`Acceptance proof ${input.report.status}: ${input.report.reworkRequest?.summary ?? 'proof did not pass'}`);
54
+ }
55
+ if (input.report.criteria.length === 0) {
56
+ reasons.push('Acceptance proof report has no criteria.');
57
+ }
58
+ const artifactRefs = new Set(input.report.artifacts.flatMap((artifact) => [
59
+ artifact.path,
60
+ artifact.url,
61
+ artifact.description,
62
+ ].filter((value) => typeof value === 'string' && value.length > 0)));
63
+ if (input.artifactExists) {
64
+ const missingArtifactPaths = input.report.artifacts
65
+ .map((artifact) => artifact.path)
66
+ .filter((path) => typeof path === 'string' && path.length > 0)
67
+ .filter((path) => !input.artifactExists?.(path));
68
+ if (missingArtifactPaths.length > 0) {
69
+ reasons.push(`Acceptance proof references missing artifact path(s): ${missingArtifactPaths.join(', ')}.`);
70
+ }
71
+ }
72
+ for (const criterion of input.report.criteria) {
73
+ if (criterion.status !== 'passed') {
74
+ reasons.push(`Acceptance proof criterion ${criterion.id} has status ${criterion.status}.`);
75
+ }
76
+ if (criterion.confidence !== 'high') {
77
+ reasons.push(`Acceptance proof criterion ${criterion.id} has confidence ${criterion.confidence}.`);
78
+ }
79
+ if (criterion.artifactRefs.length === 0) {
80
+ reasons.push(`Acceptance proof criterion ${criterion.id} has no artifact evidence.`);
81
+ continue;
82
+ }
83
+ const missingRefs = criterion.artifactRefs.filter((ref) => !artifactRefs.has(ref));
84
+ if (missingRefs.length > 0) {
85
+ reasons.push(`Acceptance proof criterion ${criterion.id} references missing artifact(s): ${missingRefs.join(', ')}.`);
86
+ }
87
+ }
88
+ validateUiEvidence({
89
+ report: input.report,
90
+ artifactRefs,
91
+ reasons,
92
+ });
93
+ const forbiddenProductPaths = [
94
+ ...input.report.proofPhaseDiff.forbiddenProductPaths,
95
+ ...classifyAcceptanceProofDiff(input.config, input.proofPhaseChangedFiles).forbiddenProductPaths,
96
+ ];
97
+ const uniqueForbiddenProductPaths = Array.from(new Set(forbiddenProductPaths.map(normalizePath))).sort();
98
+ if (uniqueForbiddenProductPaths.length > 0) {
99
+ reasons.push(`Acceptance proof produced product-code changes during acceptance proof: ${uniqueForbiddenProductPaths.join(', ')}.`);
100
+ }
101
+ return {
102
+ ok: reasons.length === 0,
103
+ reasons,
104
+ warnings,
105
+ };
106
+ }
107
+ function validateUiEvidence(input) {
108
+ const uiProofRequired = input.report.artifacts.some((artifact) => artifact.type === 'screenshot' || artifact.type === 'ui-dump');
109
+ if (!uiProofRequired && input.report.uiEvidence === undefined) {
110
+ return;
111
+ }
112
+ const uiEvidence = input.report.uiEvidence;
113
+ if (!uiEvidence) {
114
+ for (const dimension of uiEvidenceFailureDimensions) {
115
+ addUiEvidenceReason(input.reasons, dimension, 'UI artifacts require a complete UI Evidence Contract.');
116
+ }
117
+ return;
118
+ }
119
+ validateWorkflowScope(input.report, uiEvidence, input.reasons);
120
+ validateViewportCoverage(uiEvidence, input.artifactRefs, input.reasons);
121
+ validateArtifactFreshness(uiEvidence, input.artifactRefs, input.reasons);
122
+ validateLayoutReview(uiEvidence, input.artifactRefs, input.reasons);
123
+ validateCopyReview(uiEvidence, input.artifactRefs, input.reasons);
124
+ validateSourceInputs(uiEvidence, input.reasons);
125
+ }
126
+ function validateWorkflowScope(report, uiEvidence, reasons) {
127
+ const workflowScope = valueRecord(uiEvidence.workflowScope);
128
+ if (!workflowScope) {
129
+ addUiEvidenceReason(reasons, 'workflow', 'workflowScope is required.');
130
+ return;
131
+ }
132
+ if (!nonEmptyString(workflowScope.entrypoint)) {
133
+ addUiEvidenceReason(reasons, 'workflow', 'workflowScope.entrypoint is required.');
134
+ }
135
+ if (!nonEmptyString(workflowScope.screenState)) {
136
+ addUiEvidenceReason(reasons, 'workflow', 'workflowScope.screenState is required.');
137
+ }
138
+ if (!nonEmptyStringArray(workflowScope.path)) {
139
+ addUiEvidenceReason(reasons, 'workflow', 'workflowScope.path must include the user path to the screen.');
140
+ }
141
+ const authPath = workflowScope.authPath;
142
+ if (authPath !== undefined && !['real-login', 'seeded-session', 'not-required', 'blocked'].includes(String(authPath))) {
143
+ addUiEvidenceReason(reasons, 'workflow', 'workflowScope.authPath is invalid.');
144
+ }
145
+ if (authPath === 'seeded-session' && !nonEmptyString(workflowScope.authShortcutReason)) {
146
+ addUiEvidenceReason(reasons, 'workflow', 'seeded-session auth requires authShortcutReason.');
147
+ }
148
+ if (authPath === 'blocked' && report.status === 'passed') {
149
+ addUiEvidenceReason(reasons, 'workflow', 'blocked auth cannot accompany a passed proof report.');
150
+ }
151
+ }
152
+ function validateViewportCoverage(uiEvidence, artifactRefs, reasons) {
153
+ const viewportCoverage = uiEvidence.viewportCoverage;
154
+ if (!Array.isArray(viewportCoverage) || viewportCoverage.length === 0) {
155
+ addUiEvidenceReason(reasons, 'viewport', 'viewportCoverage must include at least one viewport.');
156
+ return;
157
+ }
158
+ const requiredByValues = ['desktop-web-layout', 'mobile-or-responsive', 'issue-specific', 'other'];
159
+ for (const [index, viewport] of viewportCoverage.entries()) {
160
+ const record = valueRecord(viewport);
161
+ if (!record) {
162
+ addUiEvidenceReason(reasons, 'viewport', `viewportCoverage[${index}] must be an object.`);
163
+ continue;
164
+ }
165
+ if (!nonEmptyString(record.name)) {
166
+ addUiEvidenceReason(reasons, 'viewport', `viewportCoverage[${index}].name is required.`);
167
+ }
168
+ if (!positiveInteger(record.width) || !positiveInteger(record.height)) {
169
+ addUiEvidenceReason(reasons, 'viewport', `viewportCoverage[${index}] must include positive integer width and height.`);
170
+ }
171
+ if (!requiredByValues.includes(String(record.requiredBy))) {
172
+ addUiEvidenceReason(reasons, 'viewport', `viewportCoverage[${index}].requiredBy is invalid.`);
173
+ }
174
+ if (record.requiredBy === 'desktop-web-layout' && positiveInteger(record.width) && Number(record.width) < 1280) {
175
+ addUiEvidenceReason(reasons, 'viewport', 'desktop-web-layout viewport width must be at least 1280.');
176
+ }
177
+ validateMappedRefs(record.artifactRefs, artifactRefs, reasons, 'viewport', `viewportCoverage[${index}].artifactRefs`);
178
+ }
179
+ }
180
+ function validateArtifactFreshness(uiEvidence, artifactRefs, reasons) {
181
+ const freshness = valueRecord(uiEvidence.artifactFreshness);
182
+ if (!freshness) {
183
+ addUiEvidenceReason(reasons, 'freshness', 'artifactFreshness is required.');
184
+ return;
185
+ }
186
+ if (freshness.checkedAfterFinalRun !== true) {
187
+ addUiEvidenceReason(reasons, 'freshness', 'artifactFreshness.checkedAfterFinalRun must be true.');
188
+ }
189
+ validateMappedRefs(freshness.currentArtifactRefs, artifactRefs, reasons, 'freshness', 'artifactFreshness.currentArtifactRefs');
190
+ }
191
+ function validateLayoutReview(uiEvidence, artifactRefs, reasons) {
192
+ const layoutReview = valueRecord(uiEvidence.layoutReview);
193
+ if (!layoutReview) {
194
+ addUiEvidenceReason(reasons, 'layout', 'layoutReview is required.');
195
+ return;
196
+ }
197
+ if (layoutReview.checked !== true) {
198
+ addUiEvidenceReason(reasons, 'layout', 'layoutReview.checked must be true.');
199
+ }
200
+ validateMappedFindings(layoutReview.findings, artifactRefs, reasons, 'layout', 'layoutReview.findings');
201
+ }
202
+ function validateCopyReview(uiEvidence, artifactRefs, reasons) {
203
+ const copyReview = valueRecord(uiEvidence.copyReview);
204
+ if (!copyReview) {
205
+ addUiEvidenceReason(reasons, 'copy', 'copyReview is required.');
206
+ return;
207
+ }
208
+ if (copyReview.checked !== true) {
209
+ addUiEvidenceReason(reasons, 'copy', 'copyReview.checked must be true.');
210
+ }
211
+ validateOptionalStringArray(copyReview.acceptedTerms, reasons, 'copy', 'copyReview.acceptedTerms');
212
+ validateOptionalStringArray(copyReview.rejectedTermsAbsent, reasons, 'copy', 'copyReview.rejectedTermsAbsent');
213
+ validateMappedFindings(copyReview.findings, artifactRefs, reasons, 'copy', 'copyReview.findings');
214
+ }
215
+ function validateSourceInputs(uiEvidence, reasons) {
216
+ const sourceInputs = valueRecord(uiEvidence.sourceInputs);
217
+ if (!sourceInputs) {
218
+ addUiEvidenceReason(reasons, 'source-input', 'sourceInputs is required.');
219
+ return;
220
+ }
221
+ if (!nonEmptyStringArray(sourceInputs.acceptanceCriteriaRefs)) {
222
+ addUiEvidenceReason(reasons, 'source-input', 'sourceInputs.acceptanceCriteriaRefs is required.');
223
+ }
224
+ if (!nonEmptyStringArray(sourceInputs.implementationEvidenceRefs)) {
225
+ addUiEvidenceReason(reasons, 'source-input', 'sourceInputs.implementationEvidenceRefs is required.');
226
+ }
227
+ for (const key of ['reproductionSignalRefs', 'manualQaPlanRefs', 'runtimeValidationRefs']) {
228
+ validateOptionalStringArray(sourceInputs[key], reasons, 'source-input', `sourceInputs.${key}`);
229
+ }
230
+ }
231
+ function validateMappedFindings(value, artifactRefs, reasons, dimension, label) {
232
+ if (!Array.isArray(value) || value.length === 0) {
233
+ addUiEvidenceReason(reasons, dimension, `${label} must include at least one mapped finding.`);
234
+ return;
235
+ }
236
+ for (const [index, finding] of value.entries()) {
237
+ const record = valueRecord(finding);
238
+ if (!record) {
239
+ addUiEvidenceReason(reasons, dimension, `${label}[${index}] must be an object.`);
240
+ continue;
241
+ }
242
+ if (!nonEmptyString(record.summary)) {
243
+ addUiEvidenceReason(reasons, dimension, `${label}[${index}].summary is required.`);
244
+ }
245
+ validateMappedRefs(record.artifactRefs, artifactRefs, reasons, dimension, `${label}[${index}].artifactRefs`);
246
+ }
247
+ }
248
+ function validateMappedRefs(value, artifactRefs, reasons, dimension, label) {
249
+ if (!nonEmptyStringArray(value)) {
250
+ addUiEvidenceReason(reasons, dimension, `${label} must include at least one artifact reference.`);
251
+ return;
252
+ }
253
+ const missingRefs = value.filter((ref) => !artifactRefs.has(ref));
254
+ if (missingRefs.length > 0) {
255
+ addUiEvidenceReason(reasons, dimension, `${label} references missing artifact(s): ${missingRefs.join(', ')}.`);
256
+ }
257
+ }
258
+ function validateOptionalStringArray(value, reasons, dimension, label) {
259
+ if (value === undefined) {
260
+ return;
261
+ }
262
+ if (!nonEmptyStringArray(value)) {
263
+ addUiEvidenceReason(reasons, dimension, `${label} must be a non-empty string array when present.`);
264
+ }
265
+ }
266
+ function addUiEvidenceReason(reasons, dimension, reason) {
267
+ reasons.push(`UI Evidence ${dimension}: ${reason}`);
268
+ }
269
+ function valueRecord(value) {
270
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
271
+ ? value
272
+ : undefined;
273
+ }
274
+ function nonEmptyString(value) {
275
+ return typeof value === 'string' && value.trim().length > 0;
276
+ }
277
+ function nonEmptyStringArray(value) {
278
+ return Array.isArray(value) && value.length > 0 && value.every(nonEmptyString);
279
+ }
280
+ function positiveInteger(value) {
281
+ return Number.isInteger(value) && Number(value) > 0;
282
+ }
283
+ export function classifyAcceptanceProofDiff(config, proofPhaseChangedFiles) {
284
+ const proofOwnedPathGlobs = config.reviewGates.acceptanceProof.proofOwnedPathGlobs;
285
+ const allowedProofPaths = [];
286
+ const forbiddenProductPaths = [];
287
+ for (const path of proofPhaseChangedFiles.map(normalizePath)) {
288
+ if (proofOwnedPathGlobs.some((pattern) => globMatches(pattern, path))) {
289
+ allowedProofPaths.push(path);
290
+ }
291
+ else {
292
+ forbiddenProductPaths.push(path);
293
+ }
294
+ }
295
+ return {
296
+ allowedProofPaths: allowedProofPaths.sort(),
297
+ forbiddenProductPaths: forbiddenProductPaths.sort(),
298
+ };
299
+ }
300
+ async function snapshotFileHashes(worktreePath, paths) {
301
+ const hashes = new Map();
302
+ await Promise.all(paths.map(async (path) => {
303
+ hashes.set(path, await fileHash(join(worktreePath, path)));
304
+ }));
305
+ return hashes;
306
+ }
307
+ async function changedFileHashes(worktreePath, before) {
308
+ const changed = [];
309
+ await Promise.all(Array.from(before.entries()).map(async ([path, hash]) => {
310
+ if (await fileHash(join(worktreePath, path)) !== hash) {
311
+ changed.push(path);
312
+ }
313
+ }));
314
+ return uniqueSortedPaths(changed);
315
+ }
316
+ async function fileHash(path) {
317
+ try {
318
+ return createHash('sha256').update(await readFile(path)).digest('hex');
319
+ }
320
+ catch (error) {
321
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
322
+ return undefined;
323
+ }
324
+ throw error;
325
+ }
326
+ }
327
+ export function assertAcceptanceProofReport(value) {
328
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
329
+ throw new Error('Invalid acceptance proof report: report must be an object');
330
+ }
331
+ const record = value;
332
+ if (!['passed', 'needs-rework', 'blocked'].includes(String(record.status))) {
333
+ throw new Error('Invalid acceptance proof report: status must be passed, needs-rework, or blocked');
334
+ }
335
+ assertCriteria(record.criteria);
336
+ assertArtifacts(record.artifacts);
337
+ if ('uiEvidence' in record && valueRecord(record.uiEvidence) === undefined) {
338
+ throw new Error('Invalid acceptance proof report: uiEvidence must be an object');
339
+ }
340
+ assertProofPhaseDiff(record.proofPhaseDiff);
341
+ assertStringArray(record.residualRisks, 'residualRisks');
342
+ }
343
+ function assertCriteria(value) {
344
+ if (!Array.isArray(value)) {
345
+ throw new Error('Invalid acceptance proof report: criteria must be an array');
346
+ }
347
+ for (const item of value) {
348
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) {
349
+ throw new Error('Invalid acceptance proof report: criterion must be an object');
350
+ }
351
+ const record = item;
352
+ for (const key of ['id', 'description', 'reasoningSummary']) {
353
+ if (typeof record[key] !== 'string' || record[key].trim().length === 0) {
354
+ throw new Error(`Invalid acceptance proof report: criterion.${key} must be a non-empty string`);
355
+ }
356
+ }
357
+ if (!['passed', 'failed', 'unknown'].includes(String(record.status))) {
358
+ throw new Error('Invalid acceptance proof report: criterion.status is invalid');
359
+ }
360
+ if (!['high', 'medium', 'low'].includes(String(record.confidence))) {
361
+ throw new Error('Invalid acceptance proof report: criterion.confidence is invalid');
362
+ }
363
+ assertStringArray(record.artifactRefs, 'criterion.artifactRefs');
364
+ }
365
+ }
366
+ function assertArtifacts(value) {
367
+ if (!Array.isArray(value)) {
368
+ throw new Error('Invalid acceptance proof report: artifacts must be an array');
369
+ }
370
+ for (const item of value) {
371
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) {
372
+ throw new Error('Invalid acceptance proof report: artifact must be an object');
373
+ }
374
+ const record = item;
375
+ if (!scopedArtifactTypes.includes(record.type)) {
376
+ throw new Error('Invalid acceptance proof report: artifact.type is invalid');
377
+ }
378
+ if (typeof record.description !== 'string' || record.description.trim().length === 0) {
379
+ throw new Error('Invalid acceptance proof report: artifact.description must be a non-empty string');
380
+ }
381
+ if ('path' in record && typeof record.path !== 'string') {
382
+ throw new Error('Invalid acceptance proof report: artifact.path must be a string');
383
+ }
384
+ if ('url' in record && typeof record.url !== 'string') {
385
+ throw new Error('Invalid acceptance proof report: artifact.url must be a string');
386
+ }
387
+ if (!record.path && !record.url) {
388
+ throw new Error('Invalid acceptance proof report: artifact must include path or url');
389
+ }
390
+ }
391
+ }
392
+ function assertProofPhaseDiff(value) {
393
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
394
+ throw new Error('Invalid acceptance proof report: proofPhaseDiff must be an object');
395
+ }
396
+ const record = value;
397
+ assertStringArray(record.allowedProofPaths, 'proofPhaseDiff.allowedProofPaths');
398
+ assertStringArray(record.forbiddenProductPaths, 'proofPhaseDiff.forbiddenProductPaths');
399
+ }
400
+ function assertStringArray(value, key) {
401
+ if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
402
+ throw new Error(`Invalid acceptance proof report: ${key} must be a string array`);
403
+ }
404
+ }
405
+ //# sourceMappingURL=acceptance-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acceptance-proof.js","sourceRoot":"","sources":["../../../src/runner/acceptance-proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ type AndroidProofProjectType = 'auto' | 'flutter' | 'android';
2
+ export interface AndroidVisualProofCommandInput {
3
+ issueNumber: number;
4
+ worktreePath?: string;
5
+ artifactDir?: string;
6
+ env?: NodeJS.ProcessEnv;
7
+ platform?: NodeJS.Platform;
8
+ projectType?: AndroidProofProjectType;
9
+ launchConfigName?: string;
10
+ flutterTarget?: string;
11
+ flutterFlavor?: string;
12
+ androidPackage?: string;
13
+ gradleInstallTask?: string;
14
+ launchSettleMs?: number;
15
+ }
16
+ export declare function runAndroidVisualProofCommand(input: AndroidVisualProofCommandInput): Promise<void>;
17
+ export declare function parseAndroidVisualProofArgs(args: string[], env?: NodeJS.ProcessEnv): {
18
+ ok: true;
19
+ value: AndroidVisualProofCommandInput;
20
+ } | {
21
+ ok: false;
22
+ error: string;
23
+ };
24
+ export declare function androidSdkDefaultRoots(env: NodeJS.ProcessEnv, platform: NodeJS.Platform): string[];
25
+ export {};
26
+ //# sourceMappingURL=android-visual-proof-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-visual-proof-command.d.ts","sourceRoot":"","sources":["../../../src/runner/android-visual-proof-command.ts"],"names":[],"mappings":"AAQA,KAAK,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAG9D,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA4BD,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEvG;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,8BAA8B,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsGpF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CAalG"}