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
@@ -34,6 +34,15 @@ export class InMemoryGitHubPullRequestAdapter {
34
34
  async findMergedPullRequestByHeadBranch(headBranch) {
35
35
  return this.mergedPullRequests.find((pullRequest) => pullRequest.headRefName === headBranch);
36
36
  }
37
+ async findOpenPullRequestByHeadAndBase(headBranch, baseBranch) {
38
+ for (let index = 0; index < this.createdPullRequests.length; index += 1) {
39
+ const input = this.createdPullRequests[index];
40
+ if (input?.headBranch === headBranch && input.baseBranch === baseBranch) {
41
+ return this.getPullRequest(index + 1);
42
+ }
43
+ }
44
+ return undefined;
45
+ }
37
46
  }
38
47
  export async function verifyPullRequestRefs(pullRequestAdapter, pullRequest, expectedHeadBranch, expectedBaseBranch) {
39
48
  const refreshed = await pullRequestAdapter.getPullRequest(pullRequest.number);
@@ -1 +1 @@
1
- {"version":3,"file":"pull-requests.js","sourceRoot":"","sources":["../../../src/github/pull-requests.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,gCAAgC;IAKxB;IACA;IALZ,mBAAmB,GAAkC,EAAE,CAAC;IACxD,kBAAkB,GAAwB,EAAE,CAAC;IAEpD,YACmB,QAAQ,eAAe,EACvB,OAAO,cAAc;QADrB,UAAK,GAAL,KAAK,CAAkB;QACvB,SAAI,GAAJ,IAAI,CAAiB;IACrC,CAAC;IAEG,KAAK,CAAC,sBAAsB,CAAC,KAAkC;QACpE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC/C,OAAO;YACL,MAAM;YACN,GAAG,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,MAAM,EAAE;YACnE,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,WAAW,EAAE,KAAK,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAc;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,MAAM;YACN,GAAG,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,MAAM,EAAE;YACnE,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,WAAW,EAAE,KAAK,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,iCAAiC,CAAC,UAAkB;QAC/D,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC;IAC/F,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,kBAA4C,EAC5C,WAA8B,EAC9B,kBAA0B,EAC1B,kBAA0B;IAE1B,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,CAAC,MAAM,qCAAqC,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,SAAS,CAAC,WAAW,KAAK,kBAAkB,IAAI,SAAS,CAAC,WAAW,KAAK,kBAAkB,EAAE,CAAC;QACjG,MAAM,IAAI,KAAK,CACb,yBAAyB,WAAW,CAAC,MAAM,cAAc,SAAS,CAAC,WAAW,OAAO,SAAS,CAAC,WAAW,cAAc,kBAAkB,OAAO,kBAAkB,GAAG,CACvK,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"pull-requests.js","sourceRoot":"","sources":["../../../src/github/pull-requests.ts"],"names":[],"mappings":"AAsBA,MAAM,OAAO,gCAAgC;IAKxB;IACA;IALZ,mBAAmB,GAAkC,EAAE,CAAC;IACxD,kBAAkB,GAAwB,EAAE,CAAC;IAEpD,YACmB,QAAQ,eAAe,EACvB,OAAO,cAAc;QADrB,UAAK,GAAL,KAAK,CAAkB;QACvB,SAAI,GAAJ,IAAI,CAAiB;IACrC,CAAC;IAEG,KAAK,CAAC,sBAAsB,CAAC,KAAkC;QACpE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC/C,OAAO;YACL,MAAM;YACN,GAAG,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,MAAM,EAAE;YACnE,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,WAAW,EAAE,KAAK,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAc;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,MAAM;YACN,GAAG,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,MAAM,EAAE;YACnE,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,WAAW,EAAE,KAAK,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,iCAAiC,CAAC,UAAkB;QAC/D,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC;IAC/F,CAAC;IAEM,KAAK,CAAC,gCAAgC,CAC3C,UAAkB,EAClB,UAAkB;QAElB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxE,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,KAAK,EAAE,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACxE,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,kBAA4C,EAC5C,WAA8B,EAC9B,kBAA0B,EAC1B,kBAA0B;IAE1B,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,CAAC,MAAM,qCAAqC,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,SAAS,CAAC,WAAW,KAAK,kBAAkB,IAAI,SAAS,CAAC,WAAW,KAAK,kBAAkB,EAAE,CAAC;QACjG,MAAM,IAAI,KAAK,CACb,yBAAyB,WAAW,CAAC,MAAM,cAAc,SAAS,CAAC,WAAW,OAAO,SAAS,CAAC,WAAW,cAAc,kBAAkB,OAAO,kBAAkB,GAAG,CACvK,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { CodexCommandRunInput, CodexCommandRunResult } from '../codex/command-adapter.js';
2
+ import type { CodexOrchestratorConfig } from '../config/schema.js';
3
+ import type { GitWorktreeManager } from '../git/worktree.js';
4
+ import type { GitHubIssue } from '../github/issues.js';
5
+ import type { ScopedCompletionReport } from './completion-report.js';
6
+ import type { RunnerValidationLine } from './handoff-evidence.js';
7
+ export interface AcceptanceProofAttemptEvidence {
8
+ status: 'passed' | 'needs-rework' | 'blocked';
9
+ promptPath: string;
10
+ reportPath: string;
11
+ artifactDir: string;
12
+ artifactPaths: string[];
13
+ validation: RunnerValidationLine[];
14
+ blockers: string[];
15
+ residualRisks: string[];
16
+ reworkRequest?: {
17
+ summary: string;
18
+ requiredChanges: string[];
19
+ evidenceRefs: string[];
20
+ };
21
+ }
22
+ export interface RunAcceptanceProofAttemptInput {
23
+ config: CodexOrchestratorConfig;
24
+ issue: GitHubIssue;
25
+ targetRoot: string;
26
+ worktreePath: string;
27
+ changedFiles: string[];
28
+ implementationReport: ScopedCompletionReport;
29
+ codexAdapter: {
30
+ run(input: CodexCommandRunInput): Promise<CodexCommandRunResult>;
31
+ };
32
+ git: Pick<GitWorktreeManager, 'collectSessionChangeSet'>;
33
+ beforeHead: string;
34
+ sessionId: string;
35
+ branchName: string;
36
+ workflowPromptText: string;
37
+ logPath?: string;
38
+ }
39
+ export interface AcceptanceProofAttemptResult {
40
+ status: 'passed' | 'blocked';
41
+ changedFiles: string[];
42
+ validation: RunnerValidationLine[];
43
+ artifacts: ScopedCompletionReport['artifacts'];
44
+ residualRisks: string[];
45
+ blockers: string[];
46
+ evidence: AcceptanceProofAttemptEvidence;
47
+ }
48
+ export declare function shouldRunAcceptanceProofAttempt(input: {
49
+ config: CodexOrchestratorConfig;
50
+ issue: GitHubIssue;
51
+ changedFiles: string[];
52
+ }): boolean;
53
+ export declare function runAcceptanceProofAttempt(input: RunAcceptanceProofAttemptInput): Promise<AcceptanceProofAttemptResult>;
54
+ //# sourceMappingURL=acceptance-proof-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acceptance-proof-runner.d.ts","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAUlE,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,YAAY,EAAE;QAAE,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;KAAE,CAAC;IACnF,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,8BAA8B,CAAC;CAC1C;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,OAAO,CASV;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,4BAA4B,CAAC,CAmJvC"}
@@ -0,0 +1,229 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { globMatches, normalizePath } from '../path-policy.js';
5
+ import { createAcceptanceProofDiffCapture, evaluateAcceptanceProofReport, readAcceptanceProofReport, uiEvidenceFailureDimensions, } from './acceptance-proof.js';
6
+ import { cleanupSessionCodexHome, sessionCodexHomePath } from './session-home.js';
7
+ export function shouldRunAcceptanceProofAttempt(input) {
8
+ const acceptanceProof = input.config.reviewGates.acceptanceProof;
9
+ if (!acceptanceProof.enabled) {
10
+ return false;
11
+ }
12
+ const issueText = `${input.issue.title}\n${input.issue.body}`;
13
+ return acceptanceProof.issueTextPatterns.some((pattern) => new RegExp(pattern, 'iu').test(issueText))
14
+ || input.changedFiles.some((path) => acceptanceProof.changedPathGlobs.some((pattern) => globMatches(pattern, path)));
15
+ }
16
+ export async function runAcceptanceProofAttempt(input) {
17
+ const proofDir = join(input.worktreePath, input.config.reviewGates.acceptanceProof.artifactDir, `issue-${input.issue.number}`);
18
+ const proofReportPath = join(proofDir, 'acceptance-proof-report.json');
19
+ const proofSessionId = `${input.sessionId}-acceptance-proof`;
20
+ const isolatedHomePath = sessionCodexHomePath({ targetRoot: input.targetRoot, sessionId: proofSessionId });
21
+ const proofPromptPath = join(input.targetRoot, input.config.runner.stateDir, 'prompts', `issue-${input.issue.number}-${input.sessionId}-acceptance-proof.md`);
22
+ await mkdir(proofDir, { recursive: true });
23
+ await mkdir(dirname(proofPromptPath), { recursive: true });
24
+ await mkdir(isolatedHomePath, { recursive: true });
25
+ const promptText = buildAcceptanceProofPrompt({
26
+ issue: input.issue,
27
+ config: input.config,
28
+ workflowPromptText: input.workflowPromptText,
29
+ changedFiles: input.changedFiles,
30
+ implementationReport: input.implementationReport,
31
+ promptPath: proofPromptPath,
32
+ reportPath: proofReportPath,
33
+ artifactDir: proofDir,
34
+ worktreePath: input.worktreePath,
35
+ });
36
+ await writeFile(proofPromptPath, promptText, 'utf8');
37
+ const proofDiffCapture = await createAcceptanceProofDiffCapture({
38
+ worktreePath: input.worktreePath,
39
+ changedFiles: input.changedFiles,
40
+ });
41
+ let proofResult;
42
+ try {
43
+ proofResult = await input.codexAdapter.run({
44
+ targetRoot: input.targetRoot,
45
+ config: input.config,
46
+ worktreePath: input.worktreePath,
47
+ promptPath: proofPromptPath,
48
+ promptText,
49
+ reportPath: proofReportPath,
50
+ isolatedHomePath,
51
+ issueNumber: input.issue.number,
52
+ sessionId: proofSessionId,
53
+ branchName: input.branchName,
54
+ phase: 'acceptance-proof',
55
+ logPath: input.logPath,
56
+ env: {
57
+ CODEX_ORCHESTRATOR_PROOF_DIR: proofDir,
58
+ CODEX_ORCHESTRATOR_PROOF_REPORT_PATH: proofReportPath,
59
+ CODEX_ORCHESTRATOR_PROOF_ARTIFACT_DIR: proofDir,
60
+ CODEX_ORCHESTRATOR_CHANGED_FILES: input.changedFiles.join('\n'),
61
+ CODEX_ORCHESTRATOR_PROOF_OWNED_PATH_GLOBS: input.config.reviewGates.acceptanceProof.proofOwnedPathGlobs.join('\n'),
62
+ },
63
+ });
64
+ }
65
+ finally {
66
+ await cleanupSessionCodexHome(isolatedHomePath);
67
+ }
68
+ const changeSet = await input.git.collectSessionChangeSet({
69
+ worktreePath: input.worktreePath,
70
+ baseHead: input.beforeHead,
71
+ });
72
+ const proofPhaseChangedFiles = await proofDiffCapture.collectProofPhaseChangedFiles(changeSet.changedPaths);
73
+ const reportRead = await readAcceptanceProofReport(proofReportPath);
74
+ if (reportRead.kind === 'missing') {
75
+ return blocked({
76
+ proofResult,
77
+ proofPromptPath,
78
+ proofReportPath,
79
+ proofDir,
80
+ changedFiles: changeSet.changedPaths,
81
+ artifactPaths: proofPhaseChangedFiles,
82
+ validationSummary: 'Acceptance proof blocked: proof session did not write CODEX_ORCHESTRATOR_PROOF_REPORT_PATH.',
83
+ blockers: ['Acceptance proof blocked: proof session did not write CODEX_ORCHESTRATOR_PROOF_REPORT_PATH.'],
84
+ residualRisks: [],
85
+ });
86
+ }
87
+ if (reportRead.kind === 'invalid') {
88
+ return blocked({
89
+ proofResult,
90
+ proofPromptPath,
91
+ proofReportPath,
92
+ proofDir,
93
+ changedFiles: changeSet.changedPaths,
94
+ artifactPaths: proofPhaseChangedFiles,
95
+ validationSummary: reportRead.message,
96
+ blockers: [`Acceptance proof blocked: ${reportRead.message}`],
97
+ residualRisks: [],
98
+ });
99
+ }
100
+ const evaluation = evaluateAcceptanceProofReport({
101
+ config: input.config,
102
+ report: reportRead.report,
103
+ proofPhaseChangedFiles,
104
+ artifactExists: (path) => existsSync(join(input.worktreePath, path)),
105
+ });
106
+ const status = proofStatus(reportRead.report, evaluation.ok, proofResult.exitCode);
107
+ const artifactPaths = artifactPathsFromReport(reportRead.report, proofPhaseChangedFiles);
108
+ const validation = [{
109
+ command: 'adaptive acceptance proof',
110
+ status: status === 'passed' ? 'passed' : 'failed',
111
+ summary: status === 'passed'
112
+ ? `Acceptance proof passed: ${reportRead.report.criteria.length} criterion/criteria mapped to high-confidence artifacts.`
113
+ : `Acceptance proof ${status}: ${[
114
+ proofResult.exitCode === 0 ? undefined : `proof session exited ${proofResult.exitCode}`,
115
+ ...evaluation.reasons,
116
+ ].filter(Boolean).join('; ')}`,
117
+ }];
118
+ const evidence = {
119
+ status,
120
+ promptPath: proofPromptPath,
121
+ reportPath: proofReportPath,
122
+ artifactDir: proofDir,
123
+ artifactPaths,
124
+ validation,
125
+ blockers: status === 'passed' ? [] : validation.map((line) => line.summary),
126
+ residualRisks: [...reportRead.report.residualRisks, ...evaluation.warnings],
127
+ reworkRequest: reportRead.report.reworkRequest,
128
+ };
129
+ if (status !== 'passed') {
130
+ return {
131
+ status: 'blocked',
132
+ changedFiles: changeSet.changedPaths,
133
+ validation,
134
+ artifacts: reportRead.report.artifacts,
135
+ residualRisks: evidence.residualRisks,
136
+ blockers: evidence.blockers,
137
+ evidence,
138
+ };
139
+ }
140
+ return {
141
+ status: 'passed',
142
+ changedFiles: changeSet.changedPaths,
143
+ validation,
144
+ artifacts: reportRead.report.artifacts,
145
+ residualRisks: evidence.residualRisks,
146
+ blockers: [],
147
+ evidence,
148
+ };
149
+ }
150
+ function buildAcceptanceProofPrompt(input) {
151
+ return [
152
+ '# Adaptive Proof Agent',
153
+ '## Workflow',
154
+ input.workflowPromptText,
155
+ '## Issue',
156
+ `#${input.issue.number} ${input.issue.title}`,
157
+ input.issue.body,
158
+ '## Changed Files',
159
+ input.changedFiles.length === 0 ? 'none' : input.changedFiles.map((path) => `- ${path}`).join('\n'),
160
+ '## Implementation Evidence',
161
+ JSON.stringify({
162
+ validation: input.implementationReport.validation,
163
+ artifacts: input.implementationReport.artifacts,
164
+ residualRisks: input.implementationReport.residualRisks,
165
+ }, null, 2),
166
+ '## Runner Contract',
167
+ `Prompt path: ${input.promptPath}`,
168
+ `Proof Report path: ${input.reportPath}`,
169
+ `Proof artifact directory: ${input.artifactDir}`,
170
+ `Worktree: ${input.worktreePath}`,
171
+ `Proof-owned repair paths: ${input.config.reviewGates.acceptanceProof.proofOwnedPathGlobs.join(', ')}`,
172
+ 'You do not have GitHub write authority or publication authority. Do not edit GitHub labels, comments, issues, pull requests, branches, or releases.',
173
+ 'Do not change product code during proof. If behavior is missing, return needs-rework.',
174
+ 'For UI proof, derive task-specific checks from issue acceptance criteria, implementation evidence, reproduction signals, validation sections, Manual QA Plan content when present, and runtime/media artifacts.',
175
+ 'When you include screenshot or ui-dump artifacts, include uiEvidence with workflowScope, viewportCoverage, artifactFreshness, layoutReview, copyReview, and sourceInputs. The runner is the only pass/fail authority for UI Evidence.',
176
+ 'workflowScope must record the exact entrypoint, user path, screenState, and authPath. Prefer real UI login when configured credentials are available; if you seed a session or cookie, set authPath to "seeded-session" and provide authShortcutReason.',
177
+ 'viewportCoverage must record width, height, artifactRefs, and requiredBy. Use requiredBy "desktop-web-layout" with wide desktop coverage for web layout proof. Add mobile coverage only when the issue or acceptance criteria call for mobile or responsive behavior.',
178
+ 'artifactFreshness must name current post-run artifact refs and checkedAfterFinalRun: true.',
179
+ 'layoutReview findings must cover spacing, padding, clipping, overlap, alignment, and the specific visual complaint being verified, with each finding mapped to artifactRefs.',
180
+ 'copyReview findings must cover user-facing copy and rejected implementation terms when copy is part of the acceptance path, with each finding mapped to artifactRefs.',
181
+ 'sourceInputs must cite acceptanceCriteriaRefs and implementationEvidenceRefs; cite reproductionSignalRefs, manualQaPlanRefs, and runtimeValidationRefs when those inputs exist. Source inputs cannot replace workflow, viewport, freshness, layout, or copy evidence.',
182
+ `Stable UI Evidence failure dimensions are: ${uiEvidenceFailureDimensions.join(', ')}.`,
183
+ 'Your final response must be only raw valid JSON, with no markdown fence or explanatory prose.',
184
+ 'Schema: { "status": "passed" | "needs-rework" | "blocked", "criteria": { "id": string, "description": string, "status": "passed" | "failed" | "unknown", "confidence": "high" | "medium" | "low", "reasoningSummary": string, "artifactRefs": string[] }[], "artifacts": { "type": "screenshot" | "ui-dump" | "log" | "smoke-output" | "other", "path"?: string, "url"?: string, "description": string }[], "uiEvidence"?: { "workflowScope": { "entrypoint": string, "path": string[], "screenState": string, "authPath"?: "real-login" | "seeded-session" | "not-required" | "blocked", "authShortcutReason"?: string }, "viewportCoverage": { "name": string, "width": number, "height": number, "artifactRefs": string[], "requiredBy": "desktop-web-layout" | "mobile-or-responsive" | "issue-specific" | "other" }[], "artifactFreshness": { "currentArtifactRefs": string[], "checkedAfterFinalRun": boolean }, "layoutReview": { "checked": boolean, "findings": { "summary": string, "artifactRefs": string[] }[] }, "copyReview": { "checked": boolean, "acceptedTerms"?: string[], "rejectedTermsAbsent"?: string[], "findings": { "summary": string, "artifactRefs": string[] }[] }, "sourceInputs": { "acceptanceCriteriaRefs": string[], "implementationEvidenceRefs": string[], "reproductionSignalRefs"?: string[], "manualQaPlanRefs"?: string[], "runtimeValidationRefs"?: string[] } }, "proofScriptRepair"?: { "changedPaths": string[], "summary": string }, "proofPhaseDiff": { "allowedProofPaths": string[], "forbiddenProductPaths": string[] }, "reworkRequest"?: { "summary": string, "requiredChanges": string[], "evidenceRefs": string[] }, "residualRisks": string[] }.',
185
+ ].join('\n\n');
186
+ }
187
+ function proofStatus(report, evaluationOk, exitCode) {
188
+ if (exitCode !== 0 || report.status === 'blocked') {
189
+ return 'blocked';
190
+ }
191
+ if (!evaluationOk || report.status === 'needs-rework') {
192
+ return 'needs-rework';
193
+ }
194
+ return 'passed';
195
+ }
196
+ function blocked(input) {
197
+ const validation = [{
198
+ command: 'adaptive acceptance proof',
199
+ status: 'failed',
200
+ summary: input.proofResult.exitCode === 0
201
+ ? input.validationSummary
202
+ : `${input.validationSummary} Codex exited with code ${input.proofResult.exitCode}: ${input.proofResult.stderr || input.proofResult.stdout}`,
203
+ }];
204
+ return {
205
+ status: 'blocked',
206
+ changedFiles: input.changedFiles,
207
+ validation,
208
+ artifacts: input.artifactPaths.map((path) => ({ type: 'other', path, description: `acceptance proof artifact ${path}` })),
209
+ residualRisks: input.residualRisks,
210
+ blockers: input.blockers,
211
+ evidence: {
212
+ status: 'blocked',
213
+ promptPath: input.proofPromptPath,
214
+ reportPath: input.proofReportPath,
215
+ artifactDir: input.proofDir,
216
+ artifactPaths: input.artifactPaths,
217
+ validation,
218
+ blockers: input.blockers,
219
+ residualRisks: input.residualRisks,
220
+ },
221
+ };
222
+ }
223
+ function artifactPathsFromReport(report, changedFiles) {
224
+ return Array.from(new Set([
225
+ ...changedFiles,
226
+ ...report.artifacts.flatMap((artifact) => artifact.path ? [normalizePath(artifact.path)] : []),
227
+ ])).sort((left, right) => left.localeCompare(right));
228
+ }
229
+ //# sourceMappingURL=acceptance-proof-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acceptance-proof-runner.js","sourceRoot":"","sources":["../../../src/runner/acceptance-proof-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { CodexOrchestratorConfig } from '../config/schema.js';
2
+ import { type ScopedArtifactType } from './completion-report.js';
3
+ export type AcceptanceProofStatus = 'passed' | 'needs-rework' | 'blocked';
4
+ export type AcceptanceCriterionStatus = 'passed' | 'failed' | 'unknown';
5
+ export type AcceptanceProofConfidence = 'high' | 'medium' | 'low';
6
+ export type AcceptanceProofArtifactType = ScopedArtifactType;
7
+ export interface AcceptanceProofArtifact {
8
+ type: AcceptanceProofArtifactType;
9
+ path?: string;
10
+ url?: string;
11
+ description: string;
12
+ }
13
+ export interface AcceptanceProofCriterion {
14
+ id: string;
15
+ description: string;
16
+ status: AcceptanceCriterionStatus;
17
+ confidence: AcceptanceProofConfidence;
18
+ reasoningSummary: string;
19
+ artifactRefs: string[];
20
+ }
21
+ export type UiEvidenceFailureDimension = 'workflow' | 'viewport' | 'freshness' | 'layout' | 'copy' | 'source-input';
22
+ export declare const uiEvidenceFailureDimensions: UiEvidenceFailureDimension[];
23
+ export interface AcceptanceProofUiEvidence {
24
+ workflowScope: {
25
+ entrypoint: string;
26
+ path: string[];
27
+ screenState: string;
28
+ authPath?: 'real-login' | 'seeded-session' | 'not-required' | 'blocked';
29
+ authShortcutReason?: string;
30
+ };
31
+ viewportCoverage: Array<{
32
+ name: string;
33
+ width: number;
34
+ height: number;
35
+ artifactRefs: string[];
36
+ requiredBy: 'desktop-web-layout' | 'mobile-or-responsive' | 'issue-specific' | 'other';
37
+ }>;
38
+ artifactFreshness: {
39
+ currentArtifactRefs: string[];
40
+ checkedAfterFinalRun: boolean;
41
+ };
42
+ layoutReview: {
43
+ checked: boolean;
44
+ findings: Array<{
45
+ summary: string;
46
+ artifactRefs: string[];
47
+ }>;
48
+ };
49
+ copyReview: {
50
+ checked: boolean;
51
+ acceptedTerms?: string[];
52
+ rejectedTermsAbsent?: string[];
53
+ findings: Array<{
54
+ summary: string;
55
+ artifactRefs: string[];
56
+ }>;
57
+ };
58
+ sourceInputs: {
59
+ acceptanceCriteriaRefs: string[];
60
+ implementationEvidenceRefs: string[];
61
+ reproductionSignalRefs?: string[];
62
+ manualQaPlanRefs?: string[];
63
+ runtimeValidationRefs?: string[];
64
+ };
65
+ }
66
+ export interface AcceptanceProofReport {
67
+ status: AcceptanceProofStatus;
68
+ criteria: AcceptanceProofCriterion[];
69
+ artifacts: AcceptanceProofArtifact[];
70
+ uiEvidence?: AcceptanceProofUiEvidence;
71
+ proofScriptRepair?: {
72
+ changedPaths: string[];
73
+ summary: string;
74
+ };
75
+ proofPhaseDiff: {
76
+ allowedProofPaths: string[];
77
+ forbiddenProductPaths: string[];
78
+ };
79
+ reworkRequest?: {
80
+ summary: string;
81
+ requiredChanges: string[];
82
+ evidenceRefs: string[];
83
+ };
84
+ residualRisks: string[];
85
+ }
86
+ export interface AcceptanceProofEvaluationInput {
87
+ config: CodexOrchestratorConfig;
88
+ report: AcceptanceProofReport;
89
+ proofPhaseChangedFiles: string[];
90
+ artifactExists?: (path: string) => boolean;
91
+ }
92
+ export interface AcceptanceProofEvaluationResult {
93
+ ok: boolean;
94
+ reasons: string[];
95
+ warnings: string[];
96
+ }
97
+ export interface AcceptanceProofDiffCaptureInput {
98
+ worktreePath: string;
99
+ changedFiles: string[];
100
+ }
101
+ export interface AcceptanceProofDiffCapture {
102
+ collectProofPhaseChangedFiles(changedFiles: string[]): Promise<string[]>;
103
+ }
104
+ export type AcceptanceProofReportReadResult = {
105
+ kind: 'missing';
106
+ } | {
107
+ kind: 'invalid';
108
+ message: string;
109
+ } | {
110
+ kind: 'valid';
111
+ report: AcceptanceProofReport;
112
+ };
113
+ export declare function readAcceptanceProofReport(path: string): Promise<AcceptanceProofReportReadResult>;
114
+ export declare function createAcceptanceProofDiffCapture(input: AcceptanceProofDiffCaptureInput): Promise<AcceptanceProofDiffCapture>;
115
+ export declare function evaluateAcceptanceProofReport(input: AcceptanceProofEvaluationInput): AcceptanceProofEvaluationResult;
116
+ export declare function classifyAcceptanceProofDiff(config: CodexOrchestratorConfig, proofPhaseChangedFiles: string[]): {
117
+ allowedProofPaths: string[];
118
+ forbiddenProductPaths: string[];
119
+ };
120
+ export declare function assertAcceptanceProofReport(value: unknown): asserts value is AcceptanceProofReport;
121
+ //# sourceMappingURL=acceptance-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acceptance-proof.d.ts","sourceRoot":"","sources":["../../../src/runner/acceptance-proof.ts"],"names":[],"mappings":"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"}