@cluesmith/codev 3.3.4 → 3.3.5

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 (96) hide show
  1. package/dashboard-dist/assets/index-BuflRUi6.js +220 -0
  2. package/dashboard-dist/assets/index-BuflRUi6.js.map +1 -0
  3. package/dashboard-dist/assets/index-r3bZzLmX.css +32 -0
  4. package/dashboard-dist/index.html +2 -2
  5. package/dist/agent-farm/commands/send.d.ts +3 -2
  6. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  7. package/dist/agent-farm/commands/send.js +24 -5
  8. package/dist/agent-farm/commands/send.js.map +1 -1
  9. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  10. package/dist/agent-farm/commands/spawn-worktree.js +12 -2
  11. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  12. package/dist/agent-farm/servers/decisions/file.d.ts +50 -0
  13. package/dist/agent-farm/servers/decisions/file.d.ts.map +1 -0
  14. package/dist/agent-farm/servers/decisions/file.js +146 -0
  15. package/dist/agent-farm/servers/decisions/file.js.map +1 -0
  16. package/dist/agent-farm/servers/decisions/grammar.d.ts +36 -0
  17. package/dist/agent-farm/servers/decisions/grammar.d.ts.map +1 -0
  18. package/dist/agent-farm/servers/decisions/grammar.js +109 -0
  19. package/dist/agent-farm/servers/decisions/grammar.js.map +1 -0
  20. package/dist/agent-farm/servers/decisions/notice.d.ts +11 -0
  21. package/dist/agent-farm/servers/decisions/notice.d.ts.map +1 -0
  22. package/dist/agent-farm/servers/decisions/notice.js +18 -0
  23. package/dist/agent-farm/servers/decisions/notice.js.map +1 -0
  24. package/dist/agent-farm/servers/decisions/parse.d.ts +36 -0
  25. package/dist/agent-farm/servers/decisions/parse.d.ts.map +1 -0
  26. package/dist/agent-farm/servers/decisions/parse.js +308 -0
  27. package/dist/agent-farm/servers/decisions/parse.js.map +1 -0
  28. package/dist/agent-farm/servers/decisions/routes.d.ts +17 -0
  29. package/dist/agent-farm/servers/decisions/routes.d.ts.map +1 -0
  30. package/dist/agent-farm/servers/decisions/routes.js +160 -0
  31. package/dist/agent-farm/servers/decisions/routes.js.map +1 -0
  32. package/dist/agent-farm/servers/decisions/splice.d.ts +26 -0
  33. package/dist/agent-farm/servers/decisions/splice.d.ts.map +1 -0
  34. package/dist/agent-farm/servers/decisions/splice.js +120 -0
  35. package/dist/agent-farm/servers/decisions/splice.js.map +1 -0
  36. package/dist/agent-farm/servers/decisions/stamp.d.ts +4 -0
  37. package/dist/agent-farm/servers/decisions/stamp.d.ts.map +1 -0
  38. package/dist/agent-farm/servers/decisions/stamp.js +171 -0
  39. package/dist/agent-farm/servers/decisions/stamp.js.map +1 -0
  40. package/dist/agent-farm/servers/overview.d.ts +4 -3
  41. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  42. package/dist/agent-farm/servers/overview.js +51 -24
  43. package/dist/agent-farm/servers/overview.js.map +1 -1
  44. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  45. package/dist/agent-farm/servers/tower-routes.js +63 -5
  46. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  47. package/dist/agent-farm/utils/message-format.d.ts +8 -0
  48. package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
  49. package/dist/agent-farm/utils/message-format.js +16 -0
  50. package/dist/agent-farm/utils/message-format.js.map +1 -1
  51. package/dist/commands/consult/index.d.ts +20 -1
  52. package/dist/commands/consult/index.d.ts.map +1 -1
  53. package/dist/commands/consult/index.js +56 -2
  54. package/dist/commands/consult/index.js.map +1 -1
  55. package/dist/commands/porch/checks.d.ts +7 -1
  56. package/dist/commands/porch/checks.d.ts.map +1 -1
  57. package/dist/commands/porch/checks.js +77 -14
  58. package/dist/commands/porch/checks.js.map +1 -1
  59. package/dist/commands/porch/index.d.ts +38 -1
  60. package/dist/commands/porch/index.d.ts.map +1 -1
  61. package/dist/commands/porch/index.js +79 -43
  62. package/dist/commands/porch/index.js.map +1 -1
  63. package/dist/commands/porch/protocol.d.ts +4 -3
  64. package/dist/commands/porch/protocol.d.ts.map +1 -1
  65. package/dist/commands/porch/protocol.js +32 -5
  66. package/dist/commands/porch/protocol.js.map +1 -1
  67. package/dist/commands/porch/types.d.ts +2 -0
  68. package/dist/commands/porch/types.d.ts.map +1 -1
  69. package/dist/lib/agent-env.d.ts +10 -1
  70. package/dist/lib/agent-env.d.ts.map +1 -1
  71. package/dist/lib/agent-env.js +12 -1
  72. package/dist/lib/agent-env.js.map +1 -1
  73. package/dist/lib/config.d.ts +8 -0
  74. package/dist/lib/config.d.ts.map +1 -1
  75. package/dist/lib/config.js.map +1 -1
  76. package/package.json +4 -4
  77. package/skeleton/.claude/skills/afx/SKILL.md +15 -0
  78. package/skeleton/.claude/skills/arch-init/SKILL.md +56 -9
  79. package/skeleton/.claude/skills/arch-save/SKILL.md +100 -9
  80. package/skeleton/.claude/skills/consult/SKILL.md +9 -0
  81. package/skeleton/.claude/skills/porch/SKILL.md +18 -0
  82. package/skeleton/.codex/skills/afx/SKILL.md +15 -0
  83. package/skeleton/.codex/skills/arch-init/SKILL.md +56 -9
  84. package/skeleton/.codex/skills/arch-save/SKILL.md +100 -9
  85. package/skeleton/.codex/skills/consult/SKILL.md +9 -0
  86. package/skeleton/.codex/skills/porch/SKILL.md +18 -0
  87. package/skeleton/protocol-schema.json +6 -0
  88. package/skeleton/protocols/maintain/protocol.md +5 -0
  89. package/skeleton/protocols/pir/prompts/review.md +0 -1
  90. package/skeleton/protocols/protocol-schema.json +6 -0
  91. package/skeleton/resources/commands/agent-farm.md +44 -0
  92. package/skeleton/resources/commands/consult.md +9 -2
  93. package/skeleton/templates/cheatsheet.md +1 -1
  94. package/dashboard-dist/assets/index-DZf6pNPE.js +0 -199
  95. package/dashboard-dist/assets/index-DZf6pNPE.js.map +0 -1
  96. package/dashboard-dist/assets/index-DnYLy5C_.css +0 -32
@@ -9,10 +9,32 @@ import { promisify } from 'node:util';
9
9
  import * as path from 'node:path';
10
10
  import { executeForgeCommand, getForgeCommand, loadForgeConfig } from '../../lib/forge.js';
11
11
  const execFileAsync = promisify(execFile);
12
- /** Default timeout for checks: 5 minutes */
12
+ /** Default timeout for checks: 5 minutes. A check may set its own `timeout_ms`. */
13
13
  const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
14
+ /** After a timeout's SIGTERM, how long the check's process group gets before SIGKILL */
15
+ const KILL_GRACE_MS = 5000;
16
+ /** Signals porch forwards to a running check's process group */
17
+ const RELAYED_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'];
18
+ /** Resolve once process group `pgid` has no members, or after `withinMs`. */
19
+ async function waitForGroupExit(pgid, withinMs) {
20
+ const deadline = Date.now() + withinMs;
21
+ while (Date.now() < deadline) {
22
+ try {
23
+ process.kill(-pgid, 0);
24
+ }
25
+ catch {
26
+ return; // Group is empty
27
+ }
28
+ await new Promise(r => setTimeout(r, 100));
29
+ }
30
+ }
14
31
  /**
15
- * Run a single check command
32
+ * Run a single check command.
33
+ *
34
+ * While the check runs, this installs process-level SIGINT/SIGTERM/SIGHUP
35
+ * listeners that re-raise the signal on porch itself, so call it only from
36
+ * the short-lived porch CLI (porch check/done/approve in index.ts), never
37
+ * from a long-running server.
16
38
  */
17
39
  export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS) {
18
40
  const startTime = Date.now();
@@ -24,9 +46,15 @@ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIME
24
46
  const parts = command.split(/\s+/);
25
47
  const executable = parts[0];
26
48
  const args = parts.slice(1);
49
+ // detached: the check leads its own process group, so a timeout can kill
50
+ // the whole tree (#1814). Killing only the shell left its grandchildren
51
+ // (test workers) holding stdout open, and 'close' never fired. detached
52
+ // calls setsid, so the check also has no controlling terminal: one that
53
+ // opens /dev/tty fails instead of prompting, which is intended.
27
54
  const proc = spawn(executable, args, {
28
55
  cwd,
29
56
  shell: true,
57
+ detached: true,
30
58
  stdio: ['ignore', 'pipe', 'pipe'],
31
59
  env: {
32
60
  ...process.env,
@@ -34,15 +62,36 @@ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIME
34
62
  PROJECT_TITLE: env.PROJECT_TITLE,
35
63
  },
36
64
  });
65
+ const killGroup = (signal) => {
66
+ if (proc.pid === undefined)
67
+ return;
68
+ try {
69
+ process.kill(-proc.pid, signal);
70
+ }
71
+ catch {
72
+ // Group already gone
73
+ }
74
+ };
75
+ // Leaving porch's process group also means a Ctrl+C at porch's terminal
76
+ // no longer reaches the check. Relay porch's own interruption to the
77
+ // group, then re-raise it so porch dies of the signal as before.
78
+ const relay = (signal) => {
79
+ stopRelaying();
80
+ killGroup(signal);
81
+ process.kill(process.pid, signal);
82
+ };
83
+ const stopRelaying = () => {
84
+ for (const signal of RELAYED_SIGNALS)
85
+ process.removeListener(signal, relay);
86
+ };
87
+ for (const signal of RELAYED_SIGNALS)
88
+ process.on(signal, relay);
37
89
  // Set up timeout
90
+ let escalation;
38
91
  const timeout = setTimeout(() => {
39
92
  killed = true;
40
- proc.kill('SIGTERM');
41
- setTimeout(() => {
42
- if (!proc.killed) {
43
- proc.kill('SIGKILL');
44
- }
45
- }, 5000);
93
+ killGroup('SIGTERM');
94
+ escalation = setTimeout(() => killGroup('SIGKILL'), KILL_GRACE_MS);
46
95
  }, timeoutMs);
47
96
  proc.stdout.on('data', (data) => {
48
97
  stdout += data.toString();
@@ -50,19 +99,28 @@ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIME
50
99
  proc.stderr.on('data', (data) => {
51
100
  stderr += data.toString();
52
101
  });
53
- proc.on('close', (code) => {
102
+ proc.on('close', async (code) => {
54
103
  clearTimeout(timeout);
55
- const duration = Date.now() - startTime;
56
104
  if (killed) {
105
+ // 'close' means the pipes closed, not that the group is gone: a member
106
+ // that ignores SIGTERM and holds no pipe outlives the shell. Resolving
107
+ // now would let porch exit before the SIGKILL escalation fires.
108
+ if (proc.pid !== undefined)
109
+ await waitForGroupExit(proc.pid, KILL_GRACE_MS + 1000);
110
+ clearTimeout(escalation);
111
+ stopRelaying();
57
112
  resolve({
58
113
  name,
59
114
  command,
60
115
  passed: false,
61
- error: `Timed out after ${timeoutMs / 1000}s`,
62
- duration_ms: duration,
116
+ error: `Timed out after ${timeoutMs / 1000}s (raise this check's timeout_ms if it needs longer)`,
117
+ duration_ms: Date.now() - startTime,
63
118
  });
119
+ return;
64
120
  }
65
- else if (code === 0) {
121
+ stopRelaying();
122
+ const duration = Date.now() - startTime;
123
+ if (code === 0) {
66
124
  resolve({
67
125
  name,
68
126
  command,
@@ -84,6 +142,7 @@ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIME
84
142
  });
85
143
  proc.on('error', (err) => {
86
144
  clearTimeout(timeout);
145
+ stopRelaying();
87
146
  resolve({
88
147
  name,
89
148
  command,
@@ -242,6 +301,7 @@ export function runArtifactCheck(name, command, resolver, env) {
242
301
  /**
243
302
  * Run multiple checks for a phase.
244
303
  * Accepts either Record<string, string> (legacy) or Record<string, CheckDef>.
304
+ * `timeoutMs` applies to each check that carries no `timeout_ms` of its own.
245
305
  *
246
306
  * Special handling: `pr_exists` checks are routed through the forge concept
247
307
  * command dispatcher instead of running the protocol.json command directly.
@@ -266,6 +326,9 @@ export async function runPhaseChecks(checks, cwd, env, timeoutMs = DEFAULT_TIMEO
266
326
  const checkCwd = typeof checkVal === 'object' && checkVal.cwd
267
327
  ? path.resolve(cwd, checkVal.cwd)
268
328
  : cwd;
329
+ const checkTimeoutMs = typeof checkVal === 'object' && checkVal.timeout_ms !== undefined
330
+ ? checkVal.timeout_ms
331
+ : timeoutMs;
269
332
  // Intercept pr_exists: route through forge concept command
270
333
  if (name === 'pr_exists') {
271
334
  const result = await runPrExistsViaConcept(name, checkCwd);
@@ -274,7 +337,7 @@ export async function runPhaseChecks(checks, cwd, env, timeoutMs = DEFAULT_TIMEO
274
337
  break;
275
338
  continue;
276
339
  }
277
- const result = await runCheck(name, command, checkCwd, env, timeoutMs);
340
+ const result = await runCheck(name, command, checkCwd, env, checkTimeoutMs);
278
341
  results.push(result);
279
342
  // Stop on first failure
280
343
  if (!result.passed) {
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,mFAAmF;AACnF,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC,wFAAwF;AACxF,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,gEAAgE;AAChE,MAAM,eAAe,GAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAY1E,6EAA6E;AAC7E,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;IACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,iBAAiB;QAC3B,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,OAAe,EACf,GAAW,EACX,GAAa,EACb,YAAoB,kBAAkB;IAEtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,yCAAyC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,gEAAgE;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACnC,GAAG;YACH,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC;SACF,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;gBAAE,OAAO;YACnC,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC,CAAC;QAEF,wEAAwE;QACxE,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAE,EAAE;YACvC,YAAY,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,KAAK,MAAM,MAAM,IAAI,eAAe;gBAAE,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,eAAe;YAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEhE,iBAAiB;QACjB,IAAI,UAAsC,CAAC;QAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,GAAG,IAAI,CAAC;YACd,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC;QACrE,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9B,YAAY,CAAC,OAAO,CAAC,CAAC;YAEtB,IAAI,MAAM,EAAE,CAAC;gBACX,uEAAuE;gBACvE,uEAAuE;gBACvE,gEAAgE;gBAChE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;oBAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;gBACnF,YAAY,CAAC,UAAU,CAAC,CAAC;gBACzB,YAAY,EAAE,CAAC;gBACf,OAAO,CAAC;oBACN,IAAI;oBACJ,OAAO;oBACP,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,mBAAmB,SAAS,GAAG,IAAI,sDAAsD;oBAChG,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACpC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,YAAY,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC;oBACN,IAAI;oBACJ,OAAO;oBACP,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;oBACrB,WAAW,EAAE,QAAQ;iBACtB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC;oBACN,IAAI;oBACJ,OAAO;oBACP,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;oBACrB,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,aAAa,IAAI,EAAE;oBAC3C,WAAW,EAAE,QAAQ;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,YAAY,EAAE,CAAC;YACf,OAAO,CAAC;gBACN,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;CACb,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAe,EACf,QAA0B,EAC1B,GAAa;IAEb,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAE5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,OAAO,KAAK,IAAI;gBACxB,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;gBAChE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;gBACtD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YACxG,CAAC;YACD,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;oBAC1B,CAAC,CAAC,aAAa,sBAAsB,CAAC,MAAM,oBAAoB;oBAChE,CAAC,CAAC,SAAS;gBACb,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;oBACzB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,mBAAmB,OAAO,CAAC,MAAM,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;0BAC9E,kFAAkF;0BAClF,sCAAsC;gBAC5C,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,OAAO,KAAK,IAAI;gBACxB,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;gBAChE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;gBACtD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YACxG,CAAC;YACD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;gBACnD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,4BAA4B;gBACrD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YACxG,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,KAAK,IAAI,CAAC;gBAClB,MAAM,EAAE,SAAS,KAAK,WAAW;gBACjC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,kCAAkC,CAAC,CAAC,CAAC,SAAS;gBAC9E,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YAC1G,CAAC;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YACxD,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,SAAS;gBAC9D,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qDAAqD;gBAC9E,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YAC1G,CAAC;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;YAC3D,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,SAAS;gBACjE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wDAAwD;gBACjF,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;QACJ,CAAC;QAED;YACE,OAAO,IAAI,CAAC,CAAC,0DAA0D;IAC3E,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAyC,EACzC,GAAW,EACX,GAAa,EACb,YAAoB,kBAAkB,EACtC,QAA2B,EAC3B,gBAA8B;IAE9B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAE3E,uFAAuF;QACvF,mFAAmF;QACnF,2CAA2C;QAC3C,IAAI,QAAQ,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC7B,IAAI,CAAC,cAAc,CAAC,MAAM;oBAAE,MAAM;gBAClC,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG;YAC3D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;YACjC,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,cAAc,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;YACtF,CAAC,CAAC,QAAQ,CAAC,UAAU;YACrB,CAAC,CAAC,SAAS,CAAC;QAEd,2DAA2D;QAC3D,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,MAAM;YAC1B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAY,EACZ,GAAW;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,qBAAqB,CAAC;IAEpF,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAEjG,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE;YACpD,iBAAiB,EAAE,UAAU,CAAC,IAAI,EAAE;SACrC,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAEhC,kFAAkF;QAClF,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAElG,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,QAAQ;YACjB,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACpC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACvD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAsB;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW;YACjC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YACjD,CAAC,CAAC,EAAE,CAAC;QAEP,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC,uBAAuB;YACvB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsB;IACpD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
@@ -4,7 +4,16 @@
4
4
  * Claude calls porch as a tool; porch returns prescriptive instructions.
5
5
  * All commands produce clear, actionable output.
6
6
  */
7
+ import type { ProjectState, Protocol } from './types.js';
7
8
  import { type ArtifactResolver } from './artifacts.js';
9
+ /**
10
+ * Log override/skip notices before running checks.
11
+ * Only emits output when overrides are actually in use.
12
+ * @param phaseCheckNames - original check names from the protocol phase
13
+ * @param resolvedChecks - checks after applying overrides (skipped ones absent)
14
+ * @param overrides - raw override map from .codev/config.json (null if not configured)
15
+ */
16
+ export declare function logCheckOverrides(phaseCheckNames: string[], resolvedChecks: Record<string, import('./types.js').CheckDef>, overrides: import('./types.js').CheckOverrides | null): void;
8
17
  /**
9
18
  * porch status <id> [--json]
10
19
  * Shows current state and prescriptive next steps.
@@ -80,6 +89,34 @@ export declare function init(workspaceRoot: string, protocolName: string, projec
80
89
  * List all projects with gates awaiting human approval.
81
90
  * Scans both the local workspace and any builder worktrees under .builders/*.
82
91
  */
83
- export declare function pending(workspaceRoot: string): Promise<void>;
92
+ /**
93
+ * Decide whether a `pending` gate record is still a live ask (listing filter
94
+ * for `porch pending`; never changes a record — approval stays a human, named act).
95
+ *
96
+ * Stale when:
97
+ * - the protocol finished (`verified` / `complete`), for every gate;
98
+ * - the project has moved past the phase that owns the gate;
99
+ * - for the `pr` gate only: the LAST `pr_history` entry is merged (#966 reads
100
+ * the last entry because a merged checkpoint PR followed by a later open PR
101
+ * is a normal shape). Scoped to `pr` because SPIR/ASPIR run verify AFTER the
102
+ * merge, so a merged PR must never hide `verify-approval`.
103
+ *
104
+ * Fails open: an unknown protocol, a gate the protocol does not declare, or a
105
+ * current phase the protocol does not list (an upgrade, a custom protocol, a
106
+ * legacy state) all keep the ask visible.
107
+ */
108
+ export declare function isStalePendingGate(state: ProjectState, gateName: string, protocol: Protocol | null): boolean;
109
+ /**
110
+ * porch pending [--all]
111
+ * List all projects with gates awaiting human approval.
112
+ *
113
+ * Projects come from `listAllProjects()`: builder worktrees first, then the
114
+ * root copy, one entry per project id (Spec 653 — the root copy of a committed
115
+ * status.yaml goes stale in multi-PR flows, so the worktree copy wins). Stale
116
+ * records (see `isStalePendingGate`) are hidden and counted unless `--all`.
117
+ */
118
+ export declare function pending(workspaceRoot: string, options?: {
119
+ all?: boolean;
120
+ }): Promise<void>;
84
121
  export declare function cli(args: string[]): Promise<void>;
85
122
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsCH,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAiFnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,MAAM,CAC1B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAqKf;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhH;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+L5K;AAsED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD/G;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Hf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Ef;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AA0CD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ElE;AAoBD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6KvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAiCpE,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAgDnF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EAAE,EACzB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,QAAQ,CAAC,EAC7D,SAAS,EAAE,OAAO,YAAY,EAAE,cAAc,GAAG,IAAI,GACpD,IAAI,CAiBN;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,MAAM,CAC1B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAqKf;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhH;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+L5K;AAsED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD/G;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Hf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Ef;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AA0CD;;;;GAIG;AACH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GAAG,IAAI,GACxB,OAAO,CAWT;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqEf;AAoBD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6KvD"}
@@ -9,7 +9,7 @@ import * as path from 'node:path';
9
9
  import chalk from 'chalk';
10
10
  import { globSync } from 'glob';
11
11
  import { stalledRefreshes, unacknowledgedRefreshes } from './context-refresh.js';
12
- import { readState, writeStateAndCommit, createInitialState, findStatusPath, getArtifactRoot, getProjectDir, getStatusPath, resolveProjectId, resolveArtifactBaseName, } from './state.js';
12
+ import { listAllProjects, readState, writeStateAndCommit, createInitialState, findStatusPath, getArtifactRoot, getProjectDir, getStatusPath, resolveProjectId, resolveArtifactBaseName, } from './state.js';
13
13
  import { loadProtocol, getPhaseConfig, getNextPhase, getPhaseChecks, getPhaseGate, isPhased, isBuildVerify, getVerifyConfig, } from './protocol.js';
14
14
  import { findPlanFile, extractPlanPhases, getCurrentPlanPhase, getPhaseContent, allPlanPhasesComplete, } from './plan.js';
15
15
  import { getResolver, LocalResolver } from './artifacts.js';
@@ -55,7 +55,7 @@ function scopeResolver(workspaceRoot, artifactRoot, resolver) {
55
55
  * @param resolvedChecks - checks after applying overrides (skipped ones absent)
56
56
  * @param overrides - raw override map from .codev/config.json (null if not configured)
57
57
  */
58
- function logCheckOverrides(phaseCheckNames, resolvedChecks, overrides) {
58
+ export function logCheckOverrides(phaseCheckNames, resolvedChecks, overrides) {
59
59
  if (!overrides)
60
60
  return;
61
61
  for (const name of phaseCheckNames) {
@@ -65,12 +65,14 @@ function logCheckOverrides(phaseCheckNames, resolvedChecks, overrides) {
65
65
  if (override.skip) {
66
66
  console.log(chalk.yellow(` ⚠ Check "${name}" skipped (.codev/config.json)`));
67
67
  }
68
- else if (override.command || override.cwd) {
68
+ else if (override.command || override.cwd || override.timeout_ms !== undefined) {
69
69
  const parts = [];
70
70
  if (override.command)
71
71
  parts.push(resolvedChecks[name]?.command ?? override.command);
72
72
  if (override.cwd)
73
73
  parts.push(`cwd: ${override.cwd}`);
74
+ if (override.timeout_ms !== undefined)
75
+ parts.push(`timeout: ${override.timeout_ms}ms`);
74
76
  console.log(chalk.yellow(` ⚠ Check "${name}" overridden: ${parts.join(', ')}`));
75
77
  }
76
78
  }
@@ -879,56 +881,86 @@ function getNextAction(state, protocol) {
879
881
  * List all projects with gates awaiting human approval.
880
882
  * Scans both the local workspace and any builder worktrees under .builders/*.
881
883
  */
882
- export async function pending(workspaceRoot) {
883
- const seen = new Set(); // dedupe by status.yaml path
884
+ /**
885
+ * Decide whether a `pending` gate record is still a live ask (listing filter
886
+ * for `porch pending`; never changes a record — approval stays a human, named act).
887
+ *
888
+ * Stale when:
889
+ * - the protocol finished (`verified` / `complete`), for every gate;
890
+ * - the project has moved past the phase that owns the gate;
891
+ * - for the `pr` gate only: the LAST `pr_history` entry is merged (#966 reads
892
+ * the last entry because a merged checkpoint PR followed by a later open PR
893
+ * is a normal shape). Scoped to `pr` because SPIR/ASPIR run verify AFTER the
894
+ * merge, so a merged PR must never hide `verify-approval`.
895
+ *
896
+ * Fails open: an unknown protocol, a gate the protocol does not declare, or a
897
+ * current phase the protocol does not list (an upgrade, a custom protocol, a
898
+ * legacy state) all keep the ask visible.
899
+ */
900
+ export function isStalePendingGate(state, gateName, protocol) {
901
+ if (state.phase === 'verified' || state.phase === 'complete')
902
+ return true;
903
+ if (gateName === 'pr') {
904
+ const last = state.pr_history?.[state.pr_history.length - 1];
905
+ if (last?.merged === true)
906
+ return true;
907
+ }
908
+ if (!protocol)
909
+ return false;
910
+ const gatePhaseIndex = protocol.phases.findIndex((ph) => ph.gate === gateName);
911
+ const currentIndex = protocol.phases.findIndex((ph) => ph.id === state.phase);
912
+ if (gatePhaseIndex === -1 || currentIndex === -1)
913
+ return false;
914
+ return currentIndex > gatePhaseIndex;
915
+ }
916
+ /**
917
+ * porch pending [--all]
918
+ * List all projects with gates awaiting human approval.
919
+ *
920
+ * Projects come from `listAllProjects()`: builder worktrees first, then the
921
+ * root copy, one entry per project id (Spec 653 — the root copy of a committed
922
+ * status.yaml goes stale in multi-PR flows, so the worktree copy wins). Stale
923
+ * records (see `isStalePendingGate`) are hidden and counted unless `--all`.
924
+ */
925
+ export async function pending(workspaceRoot, options = {}) {
926
+ const protocols = new Map();
884
927
  const results = [];
885
- // Build the list of project directories to scan: main + every builder worktree.
886
- const projectsDirs = [path.join(workspaceRoot, 'codev', 'projects')];
887
- const buildersDir = path.join(workspaceRoot, '.builders');
888
- if (fs.existsSync(buildersDir)) {
889
- for (const wt of fs.readdirSync(buildersDir, { withFileTypes: true })) {
890
- if (!wt.isDirectory())
891
- continue;
892
- projectsDirs.push(path.join(buildersDir, wt.name, 'codev', 'projects'));
893
- }
894
- }
895
- for (const projectsDir of projectsDirs) {
896
- if (!fs.existsSync(projectsDir))
897
- continue;
898
- for (const entry of fs.readdirSync(projectsDir, { withFileTypes: true })) {
899
- if (!entry.isDirectory())
900
- continue;
901
- const statusPath = path.join(projectsDir, entry.name, 'status.yaml');
902
- if (!fs.existsSync(statusPath))
903
- continue;
904
- const realPath = fs.realpathSync(statusPath);
905
- if (seen.has(realPath))
906
- continue;
907
- seen.add(realPath);
908
- let state;
928
+ let staleHidden = 0;
929
+ for (const { statusPath, state } of listAllProjects(workspaceRoot)) {
930
+ if (!protocols.has(state.protocol)) {
931
+ let protocol = null;
909
932
  try {
910
- state = readState(statusPath);
933
+ protocol = loadProtocol(workspaceRoot, state.protocol);
911
934
  }
912
935
  catch {
913
- continue; // skip corrupted status files
936
+ protocol = null; // unknown protocol: terminal-phase and merged rules only
914
937
  }
915
- for (const [gateName, gateStatus] of Object.entries(state.gates)) {
916
- if (gateStatus?.status === 'pending' && gateStatus.requested_at) {
917
- results.push({
918
- id: state.id,
919
- title: state.title,
920
- phase: state.phase,
921
- gate: gateName,
922
- requested_at: gateStatus.requested_at,
923
- statusPath,
924
- });
938
+ protocols.set(state.protocol, protocol);
939
+ }
940
+ const protocol = protocols.get(state.protocol) ?? null;
941
+ for (const [gateName, gateStatus] of Object.entries(state.gates)) {
942
+ if (gateStatus?.status === 'pending' && gateStatus.requested_at) {
943
+ if (!options.all && isStalePendingGate(state, gateName, protocol)) {
944
+ staleHidden++;
945
+ continue;
925
946
  }
947
+ results.push({
948
+ id: state.id,
949
+ title: state.title,
950
+ phase: state.phase,
951
+ gate: gateName,
952
+ requested_at: gateStatus.requested_at,
953
+ statusPath,
954
+ });
926
955
  }
927
956
  }
928
957
  }
929
958
  console.log('');
930
959
  if (results.length === 0) {
931
960
  console.log(chalk.dim('No gates pending approval.'));
961
+ if (staleHidden > 0) {
962
+ console.log(chalk.dim(`(${staleHidden} stale pending record${staleHidden === 1 ? '' : 's'} on finished or advanced projects hidden; porch pending --all shows them)`));
963
+ }
932
964
  console.log('');
933
965
  return;
934
966
  }
@@ -942,6 +974,10 @@ export async function pending(workspaceRoot) {
942
974
  console.log(chalk.dim(` approve: porch approve ${r.id} ${r.gate} --a-human-explicitly-approved-this`));
943
975
  console.log('');
944
976
  }
977
+ if (staleHidden > 0) {
978
+ console.log(chalk.dim(`(${staleHidden} stale pending record${staleHidden === 1 ? '' : 's'} on finished or advanced projects hidden; porch pending --all shows them)`));
979
+ console.log('');
980
+ }
945
981
  }
946
982
  function getArtifactForPhase(workspaceRoot, state, resolver) {
947
983
  const baseName = resolveArtifactBaseName(workspaceRoot, state.id, state.title, resolver);
@@ -988,7 +1024,7 @@ export async function cli(args) {
988
1024
  try {
989
1025
  switch (command) {
990
1026
  case 'pending':
991
- await pending(workspaceRoot);
1027
+ await pending(workspaceRoot, { all: args.includes('--all') });
992
1028
  break;
993
1029
  case 'next': {
994
1030
  const { next: porchNext } = await import('./next.js');
@@ -1096,7 +1132,7 @@ export async function cli(args) {
1096
1132
  console.log(' done [id] --pr N --branch NAME Record PR creation (no phase advancement)');
1097
1133
  console.log(' done [id] --merged N Mark PR as merged (no phase advancement)');
1098
1134
  console.log(' gate [id] Request human approval');
1099
- console.log(' pending List all gates awaiting approval across projects');
1135
+ console.log(' pending [--all] List gates awaiting approval across projects (--all includes stale records on finished projects)');
1100
1136
  console.log(' approve <id> <gate> --a-human-explicitly-approved-this');
1101
1137
  console.log(' verify <id> --skip "reason" Skip verification and mark as verified');
1102
1138
  console.log(' rollback <id> <phase> Rewind project to an earlier phase');