@lannguyensi/harness 0.58.2 → 0.59.0

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 (66) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/dist/cli/apply/apply.d.ts +56 -2
  4. package/dist/cli/apply/apply.js +227 -13
  5. package/dist/cli/apply/apply.js.map +1 -1
  6. package/dist/cli/apply/index.d.ts +1 -1
  7. package/dist/cli/apply/index.js +1 -1
  8. package/dist/cli/apply/index.js.map +1 -1
  9. package/dist/cli/apply/install-codex-config.d.ts +15 -0
  10. package/dist/cli/apply/install-codex-config.js +119 -7
  11. package/dist/cli/apply/install-codex-config.js.map +1 -1
  12. package/dist/cli/delegate/index.js +11 -5
  13. package/dist/cli/delegate/index.js.map +1 -1
  14. package/dist/cli/index.js +13 -5
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/init/composer.js +1 -0
  17. package/dist/cli/init/composer.js.map +1 -1
  18. package/dist/cli/init/interactive.js +14 -5
  19. package/dist/cli/init/interactive.js.map +1 -1
  20. package/dist/cli/init/profiles.js +1 -0
  21. package/dist/cli/init/profiles.js.map +1 -1
  22. package/dist/cli/init/templates.js +1 -0
  23. package/dist/cli/init/templates.js.map +1 -1
  24. package/dist/cli/pack/hook-codex-post-tool-use.js +2 -2
  25. package/dist/cli/pack/hook-codex-post-tool-use.js.map +1 -1
  26. package/dist/cli/pack/hook-codex-pre-tool-use.js +8 -1
  27. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
  28. package/dist/cli/pack/hook-post-tool-use.js +16 -4
  29. package/dist/cli/pack/hook-post-tool-use.js.map +1 -1
  30. package/dist/cli/pack/hook-pre-tool-use.js +11 -1
  31. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
  32. package/dist/cli/pack/remove.js +8 -6
  33. package/dist/cli/pack/remove.js.map +1 -1
  34. package/dist/cli/smoke/index.js +12 -1
  35. package/dist/cli/smoke/index.js.map +1 -1
  36. package/dist/io/last-apply.d.ts +1 -0
  37. package/dist/io/last-apply.js +8 -1
  38. package/dist/io/last-apply.js.map +1 -1
  39. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +7 -2
  40. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +1 -1
  41. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +2 -1
  42. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +1 -1
  43. package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +1 -1
  44. package/dist/policy-packs/builtin/understanding-before-execution/index.js +1 -1
  45. package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +1 -1
  46. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +2 -1
  47. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +1 -1
  48. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +1 -1
  49. package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +24 -1
  50. package/dist/policy-packs/builtin/understanding-before-execution/markers.js +20 -2
  51. package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +1 -1
  52. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +31 -9
  53. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +29 -19
  54. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +1 -1
  55. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +50 -0
  56. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +46 -6
  57. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +1 -1
  58. package/dist/policy-packs/builtin/understanding-before-execution.js +11 -7
  59. package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
  60. package/dist/runtime/approval-signing.d.ts +7 -0
  61. package/dist/runtime/approval-signing.js +31 -4
  62. package/dist/runtime/approval-signing.js.map +1 -1
  63. package/dist/runtime/task-providers/agent-tasks.d.ts +12 -1
  64. package/dist/runtime/task-providers/agent-tasks.js +12 -0
  65. package/dist/runtime/task-providers/agent-tasks.js.map +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,17 @@ export interface ApprovalMarker {
12
12
  * (possibly `null`) on a marker `checkApprovalMarker` returns.
13
13
  */
14
14
  reportContentHash?: string | null;
15
+ /**
16
+ * Task binding (task 5018c0c4): the active-claim task id this approval
17
+ * was granted for, `null` when no claim was held at approval time.
18
+ * Signed. On write, omitted means "resolve it now from the active-claim
19
+ * file" (see `writeApprovalMarker`). On a marker `checkApprovalMarker`
20
+ * returns, the property is ABSENT for a marker that carries no binding
21
+ * (one written by a release before the binding existed); the gate's
22
+ * session-marker reader (`checkSessionApprovalMarker`) refuses such a
23
+ * marker.
24
+ */
25
+ claimTaskId?: string | null;
15
26
  }
16
27
  /**
17
28
  * Operator-side: write the marker file the gate consults. Atomic so a
@@ -22,12 +33,24 @@ export interface ApprovalMarker {
22
33
  * approve CLI rather than as a generally importable verb.
23
34
  *
24
35
  * The marker is HMAC-signed (harness/f9485cc7) over (sessionId,
25
- * approvedAt, approvedBy, reportContentHash) using an operator-side key
36
+ * approvedAt, approvedBy, reportContentHash), plus the claimTaskId every
37
+ * marker this writer signs carries (see `canonicalPayload`), using an operator-side key
26
38
  * lazily generated at `<generatedDir>/.approval-signing.key` — see
27
39
  * `src/runtime/approval-signing.ts` for the key-management contract and
28
40
  * the honest trust model. Mode 0600 on the marker file itself, best-
29
41
  * effort (matches the signing key's own permission convention); this is
30
42
  * defense-in-depth alongside the signature, not a substitute for it.
43
+ *
44
+ * Task binding (task 5018c0c4): every marker this writer signs records
45
+ * the task id of the active claim at the moment of writing (`null` when
46
+ * none is held), unless the caller passes `claimTaskId` explicitly. The
47
+ * binding is resolved here, at the one writer, so no approve path (the
48
+ * `harness approve understanding` CLI, the hook's auto-approval path)
49
+ * can mint an unbound session marker. Only the understanding gate's
50
+ * session-marker reader enforces it, and only outside
51
+ * `approval_lifecycle: { mode: session }` (the field is written in every
52
+ * mode so a later mode change takes effect); the branch-protection marker, which
53
+ * shares this writer under its own id, carries the field unused.
31
54
  */
32
55
  export declare function writeApprovalMarker(generatedDir: string, sessionId: string, marker: ApprovalMarker): string;
33
56
  export interface MarkerCheck {
@@ -11,6 +11,7 @@ import { readRegularFileRejectingSymlink } from "../../../io/read-regular-file.j
11
11
  import { signMarker, verifyMarkerSignature } from "../../../runtime/approval-signing.js";
12
12
  import { rejectMalformedSessionId } from "../../../runtime/reject-malformed-session-id.js";
13
13
  import { safeJsonParse } from "../../../io/safe-json-parse.js";
14
+ import { readActiveClaim } from "./active-claim.js";
14
15
  export const APPROVAL_MARKER_DIRNAME = ".approvals";
15
16
  /** Filesystem path of the per-session approval marker. */
16
17
  export function approvalMarkerPathFor(generatedDir, sessionId) {
@@ -26,16 +27,29 @@ export function approvalMarkerPathFor(generatedDir, sessionId) {
26
27
  * approve CLI rather than as a generally importable verb.
27
28
  *
28
29
  * The marker is HMAC-signed (harness/f9485cc7) over (sessionId,
29
- * approvedAt, approvedBy, reportContentHash) using an operator-side key
30
+ * approvedAt, approvedBy, reportContentHash), plus the claimTaskId every
31
+ * marker this writer signs carries (see `canonicalPayload`), using an operator-side key
30
32
  * lazily generated at `<generatedDir>/.approval-signing.key` — see
31
33
  * `src/runtime/approval-signing.ts` for the key-management contract and
32
34
  * the honest trust model. Mode 0600 on the marker file itself, best-
33
35
  * effort (matches the signing key's own permission convention); this is
34
36
  * defense-in-depth alongside the signature, not a substitute for it.
37
+ *
38
+ * Task binding (task 5018c0c4): every marker this writer signs records
39
+ * the task id of the active claim at the moment of writing (`null` when
40
+ * none is held), unless the caller passes `claimTaskId` explicitly. The
41
+ * binding is resolved here, at the one writer, so no approve path (the
42
+ * `harness approve understanding` CLI, the hook's auto-approval path)
43
+ * can mint an unbound session marker. Only the understanding gate's
44
+ * session-marker reader enforces it, and only outside
45
+ * `approval_lifecycle: { mode: session }` (the field is written in every
46
+ * mode so a later mode change takes effect); the branch-protection marker, which
47
+ * shares this writer under its own id, carries the field unused.
35
48
  */
36
49
  export function writeApprovalMarker(generatedDir, sessionId, marker) {
37
50
  const filePath = approvalMarkerPathFor(generatedDir, sessionId);
38
- const signed = signMarker(generatedDir, sessionId, marker);
51
+ const claimTaskId = marker.claimTaskId !== undefined ? marker.claimTaskId : readActiveClaim(generatedDir);
52
+ const signed = signMarker(generatedDir, sessionId, { ...marker, claimTaskId });
39
53
  atomicWriteFile(filePath, `${JSON.stringify(signed, null, 2)}\n`, { mode: 0o600 });
40
54
  return filePath;
41
55
  }
@@ -188,6 +202,10 @@ export function checkApprovalMarker(generatedDir, sessionId, opts = {}) {
188
202
  const approvedBy = obj["approvedBy"];
189
203
  const reportContentHash = typeof obj["reportContentHash"] === "string" ? obj["reportContentHash"] : null;
190
204
  const marker = { approvedAt, approvedBy, reportContentHash };
205
+ // Signature verification above already rejected a malformed binding.
206
+ if (Object.prototype.hasOwnProperty.call(obj, "claimTaskId")) {
207
+ marker.claimTaskId = obj["claimTaskId"];
208
+ }
191
209
  if (opts.maxAgeMs !== undefined) {
192
210
  const approvedAtMs = Date.parse(approvedAt);
193
211
  if (Number.isFinite(approvedAtMs)) {
@@ -1 +1 @@
1
- {"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/markers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/markers.ts"],"names":[],"mappings":"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"}
@@ -53,22 +53,44 @@ export declare function extractTasksTransitionStatusFromToolInput(toolInput: unk
53
53
  export interface PostToolUseBoundaryMatch {
54
54
  /** Final match decision: `toolNameMatched || bashRegex !== undefined`. */
55
55
  matched: boolean;
56
- /** Tool-name match, refined by the tasks_transition status filter. */
56
+ /** Tool-name match, refined by the active-claim decider (a claim
57
+ * lifecycle verb the decider says keeps the work claim does not
58
+ * count, see `claimKeptByDecider`). */
57
59
  toolNameMatched: boolean;
58
- /** Tool-name match BEFORE the tasks_transition status filter — lets
59
- * the caller distinguish "not in the list" from "in the list, but
60
- * status keeps the claim" for its diagnostic. */
60
+ /** Tool-name match BEFORE the active-claim decider filter: lets the
61
+ * caller distinguish "not in the list" from "in the list, but the
62
+ * work claim is kept" for its diagnostic. */
61
63
  rawToolNameMatched: boolean;
64
+ /** True when the tool is an agent-tasks claim lifecycle verb and
65
+ * `claimEffectForAgentTasksTool` returned `"none"` for it (a
66
+ * `task_finish` whose result landed in `review`, a legacy
67
+ * `tasks_transition` to a status other than `done`). */
68
+ claimKeptByDecider: boolean;
62
69
  /** The `expire_on_bash_match` regex the command satisfied, if any. */
63
70
  bashRegex: RegExp | undefined;
64
71
  }
65
72
  /**
66
- * Decide whether `toolName` (+ its `tool_input`) crosses one of the
67
- * configured `approval_lifecycle` boundaries. Pure — no filesystem
68
- * access. Callers branch on `.matched` before touching marker/report
69
- * state (see `applyPostToolUseExpiry`).
73
+ * Decide whether `toolName` (+ its `tool_input` and `tool_response`)
74
+ * crosses one of the configured `approval_lifecycle` boundaries. Pure,
75
+ * no filesystem access. Callers branch on `.matched` before touching
76
+ * marker/report state (see `applyPostToolUseExpiry`).
77
+ *
78
+ * The approval marker expires on the same boundary as the active-claim
79
+ * marker (task 5018c0c4): for an agent-tasks claim lifecycle verb
80
+ * (`ACTIVE_CLAIM_TOOL_NAMES`) the one decider,
81
+ * `claimEffectForAgentTasksTool`, is asked with the tool RESULT, and a
82
+ * `"none"` (claim kept) answer means "not a boundary". So a
83
+ * `task_finish` that lands the task in `review` keeps the approval,
84
+ * while `done`, `task_abandon`, `task_merge` and a `tasks_transition`
85
+ * to `done` expire it. There is no second local classification here.
86
+ * The decider's own fail-safe direction is `"release"` for an absent or
87
+ * unreadable `task_finish` result, which here means EXPIRE: the safe
88
+ * side of a gate. An `"acquire"` answer (`task_start`, only reachable
89
+ * when an operator lists it explicitly) and a tool the decider does not
90
+ * track (`pull_requests_merge`, `task_submit_pr`, any non-agent-tasks
91
+ * tool) keep the plain list-membership behaviour.
70
92
  */
71
- export declare function matchPostToolUseBoundary(toolName: string, toolInput: unknown, lifecycle: Pick<ApprovalLifecycle, "expireOnToolMatch" | "expireOnBashMatch">, bashToolNames?: ReadonlySet<string>): PostToolUseBoundaryMatch;
93
+ export declare function matchPostToolUseBoundary(toolName: string, toolInput: unknown, lifecycle: Pick<ApprovalLifecycle, "expireOnToolMatch" | "expireOnBashMatch">, bashToolNames?: ReadonlySet<string>, toolResponse?: unknown): PostToolUseBoundaryMatch;
72
94
  export interface ApplyPostToolUseExpiryResult {
73
95
  /** Did the session marker exist before this call cleared it? */
74
96
  wasMarkerPresent: boolean;
@@ -5,7 +5,7 @@
5
5
  // the re-exported public surface.
6
6
  import * as fs from "node:fs";
7
7
  import { expandToolNameAliases } from "../../../runtime/tool-name-aliases.js";
8
- import { matchesAgentTasksRuntimeVerb, taskIdFromInput, tasksTransitionStatusFromInput, tasksTransitionReleasesClaim, } from "../../../runtime/task-providers/agent-tasks.js";
8
+ import { ACTIVE_CLAIM_TOOL_NAMES, claimEffectForAgentTasksTool, taskIdFromInput, tasksTransitionStatusFromInput, } from "../../../runtime/task-providers/agent-tasks.js";
9
9
  import { approvalMarkerPathFor, clearApprovalMarker } from "./markers.js";
10
10
  import { expirePersistedReport } from "./persisted-reports.js";
11
11
  import { clearTaskApprovalMarker, taskApprovalMarkerPathFor } from "./task-markers.js";
@@ -96,27 +96,36 @@ export function extractTasksTransitionStatusFromToolInput(toolInput) {
96
96
  return tasksTransitionStatusFromInput(toolInput);
97
97
  }
98
98
  /**
99
- * Decide whether `toolName` (+ its `tool_input`) crosses one of the
100
- * configured `approval_lifecycle` boundaries. Pure — no filesystem
101
- * access. Callers branch on `.matched` before touching marker/report
102
- * state (see `applyPostToolUseExpiry`).
99
+ * Decide whether `toolName` (+ its `tool_input` and `tool_response`)
100
+ * crosses one of the configured `approval_lifecycle` boundaries. Pure,
101
+ * no filesystem access. Callers branch on `.matched` before touching
102
+ * marker/report state (see `applyPostToolUseExpiry`).
103
+ *
104
+ * The approval marker expires on the same boundary as the active-claim
105
+ * marker (task 5018c0c4): for an agent-tasks claim lifecycle verb
106
+ * (`ACTIVE_CLAIM_TOOL_NAMES`) the one decider,
107
+ * `claimEffectForAgentTasksTool`, is asked with the tool RESULT, and a
108
+ * `"none"` (claim kept) answer means "not a boundary". So a
109
+ * `task_finish` that lands the task in `review` keeps the approval,
110
+ * while `done`, `task_abandon`, `task_merge` and a `tasks_transition`
111
+ * to `done` expire it. There is no second local classification here.
112
+ * The decider's own fail-safe direction is `"release"` for an absent or
113
+ * unreadable `task_finish` result, which here means EXPIRE: the safe
114
+ * side of a gate. An `"acquire"` answer (`task_start`, only reachable
115
+ * when an operator lists it explicitly) and a tool the decider does not
116
+ * track (`pull_requests_merge`, `task_submit_pr`, any non-agent-tasks
117
+ * tool) keep the plain list-membership behaviour.
103
118
  */
104
- export function matchPostToolUseBoundary(toolName, toolInput, lifecycle, bashToolNames = DEFAULT_BASH_TOOL_NAMES) {
119
+ export function matchPostToolUseBoundary(toolName, toolInput, lifecycle, bashToolNames = DEFAULT_BASH_TOOL_NAMES, toolResponse) {
105
120
  const rawToolNameMatched = toolNameMatchesAny(toolName, lifecycle.expireOnToolMatch);
106
- // Legacy v1 `tasks_transition`: only `status=done` releases the work
107
- // claim (per task_finish docs: "The work claim is cleared when going
108
- // to done and kept when going to review"). open / in_progress /
109
- // review / missing status keep the marker. The task-provider adapter
110
- // applies the same alias expansion as the general match above:
111
- // a Codex dotted/server-variant `tasks_transition`
112
- // tool_name must still get the status filter applied, otherwise it
113
- // would fall through to the unconditional `true` branch below and
114
- // clear the marker on ANY status — a worse bug than a missed match
121
+ // Alias-aware membership (a Codex dotted/server-variant tool_name is
122
+ // still a claim verb), so a variant `tasks_transition` cannot fall
123
+ // through to plain membership and clear the marker on ANY status
115
124
  // (review finding on task a1348c89).
116
- const tasksTransitionStatusOk = matchesAgentTasksRuntimeVerb(toolName, ["tasks_transition"])
117
- ? tasksTransitionReleasesClaim(toolInput)
118
- : true;
119
- const toolNameMatched = rawToolNameMatched && tasksTransitionStatusOk;
125
+ const claimKeptByDecider = rawToolNameMatched &&
126
+ toolNameMatchesAny(toolName, ACTIVE_CLAIM_TOOL_NAMES) &&
127
+ claimEffectForAgentTasksTool(toolName, toolInput, toolResponse) === "none";
128
+ const toolNameMatched = rawToolNameMatched && !claimKeptByDecider;
120
129
  // Bash check only runs when the event is actually a Bash(-alias) call;
121
130
  // an MCP tool whose name happens to match a regex is not a Bash
122
131
  // boundary.
@@ -127,6 +136,7 @@ export function matchPostToolUseBoundary(toolName, toolInput, lifecycle, bashToo
127
136
  matched: toolNameMatched || bashRegex !== undefined,
128
137
  toolNameMatched,
129
138
  rawToolNameMatched,
139
+ claimKeptByDecider,
130
140
  bashRegex,
131
141
  };
132
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"post-tool-use-boundary.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post-tool-use-boundary.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,48 @@ export declare function writeTaskApprovalMarker(generatedDir: string, taskId: st
32
32
  * difference is the filename suffix derived from `active-claim`.
33
33
  */
34
34
  export declare function checkActiveClaimApprovalMarker(generatedDir: string, opts?: CheckApprovalMarkerOptions): MarkerCheck;
35
+ export interface SessionMarkerCheck extends MarkerCheck {
36
+ /**
37
+ * True when a validly signed session marker existed but was refused
38
+ * because of its task binding (task 5018c0c4): it was granted for a
39
+ * different active claim than the current one, or it carries no
40
+ * binding at all (written by a release before the binding existed).
41
+ * `matched`, `expired` and `forged` are all false in that case: the
42
+ * gate treats it exactly like a missing marker.
43
+ */
44
+ bindingRefused: boolean;
45
+ }
46
+ /**
47
+ * Gate-side: the session-keyed marker, accepted only while it belongs to
48
+ * the current task (task 5018c0c4, operator decision: bind the session
49
+ * marker to the task). `writeApprovalMarker` records the active-claim
50
+ * task id at approval time (`null` when none was held); this reader
51
+ * compares it with the active claim NOW and refuses the marker when the
52
+ * two differ, so an approval never carries over to another task, even
53
+ * when the previous task completed outside the session where no
54
+ * PostToolUse hook could expire it (a merge in the UI, a webhook moving
55
+ * the task to done). A marker without the binding field (older release)
56
+ * is refused too: one fresh approve re-binds it.
57
+ *
58
+ * The binding is checked BEFORE the `maxAgeMs` verdict is passed on, so a
59
+ * marker that belongs to another task never reads as `expired` (that
60
+ * signal means "this task's own approval aged out" and opens the
61
+ * recovery-git-commit exemption, see src/runtime/recovery-git-commit.ts).
62
+ *
63
+ * `opts.taskBinding` is required so every reader states it: pass
64
+ * `!lifecycle.legacyMode`. Under `approval_lifecycle: { mode: session }`
65
+ * (operator decision on task 5018c0c4) the binding is NOT applied: the
66
+ * documented contract of that mode is one approval for the whole
67
+ * session, bounded only by `max_age`, so a bound or unbound session
68
+ * marker counts for every task there. The writer still records
69
+ * `claimTaskId` in every mode, so switching away from `mode: session`
70
+ * takes effect on the next check without a re-approve.
71
+ */
72
+ export interface CheckSessionApprovalMarkerOptions extends CheckApprovalMarkerOptions {
73
+ /** Apply the claimed-task binding (false under `mode: session`). */
74
+ taskBinding: boolean;
75
+ }
76
+ export declare function checkSessionApprovalMarker(generatedDir: string, sessionId: string, opts: CheckSessionApprovalMarkerOptions): SessionMarkerCheck;
35
77
  export interface OperatorMarkerApproval {
36
78
  matched: boolean;
37
79
  /** Which marker satisfied the gate; null when neither matched. */
@@ -61,6 +103,14 @@ export interface OperatorMarkerApproval {
61
103
  * attempt distinctly from the routine "not approved yet" case.
62
104
  */
63
105
  forged: boolean;
106
+ /**
107
+ * True when the session marker was refused only because of its task
108
+ * binding (`SessionMarkerCheck.bindingRefused`, task 5018c0c4): it
109
+ * belongs to another task, or predates the binding. Always false when
110
+ * `matched` is true. Lets the PreToolUse hooks say "the approval
111
+ * belongs to another task" instead of "no approval marker".
112
+ */
113
+ sessionBindingRefused: boolean;
64
114
  }
65
115
  /**
66
116
  * Shared marker resolution for the Claude and Codex understanding-gate
@@ -24,11 +24,15 @@ import { APPROVAL_MARKER_DIRNAME, checkApprovalMarker, } from "./markers.js";
24
24
  // (different surface, different acceptance criteria). Without per-task
25
25
  // markers a multi-task session re-uses the first task's approval for
26
26
  // every subsequent task. The expire_on_tool_match PostToolUse hook
27
- // already deletes the session marker on `task_finish`, but if delivery
28
- // is unreliable (e.g. PostToolUse skipped for an MCP tool) the marker
29
- // silently persists. A task-keyed marker side-steps that delivery
30
- // concern because the next task's id is different even if the previous
31
- // marker file outlives its scope.
27
+ // deletes the session marker on a listed completion boundary (a
28
+ // `task_finish` to done, `task_abandon`, `task_merge`, ...), but if
29
+ // delivery is unreliable (e.g. PostToolUse skipped for an MCP tool) or
30
+ // the task completes outside the session (a merge in the UI), the file
31
+ // persists. A task-keyed marker side-steps that delivery concern because
32
+ // the next task's id is different even if the previous marker file
33
+ // outlives its scope; outside `mode: session` the session marker gets
34
+ // the same property from its signed task binding
35
+ // (`checkSessionApprovalMarker`, task 5018c0c4).
32
36
  export const APPROVAL_MARKER_TASK_PREFIX = "task-";
33
37
  /**
34
38
  * Reject taskIds that would escape the approvals/ namespace via path
@@ -115,6 +119,36 @@ export function checkActiveClaimApprovalMarker(generatedDir, opts = {}) {
115
119
  forged: check.forged,
116
120
  };
117
121
  }
122
+ function describeClaim(taskId) {
123
+ return taskId === null ? "no claimed task" : `task ${taskId}`;
124
+ }
125
+ export function checkSessionApprovalMarker(generatedDir, sessionId, opts) {
126
+ const { taskBinding, ...ageOpts } = opts;
127
+ const check = checkApprovalMarker(generatedDir, sessionId, ageOpts);
128
+ if (check.marker === null || !taskBinding) {
129
+ // Absent, unreadable, forged, or a malformed session id: nothing to
130
+ // bind, the plain verdict stands. Same under `mode: session`, where
131
+ // the binding does not apply.
132
+ return { ...check, bindingRefused: false };
133
+ }
134
+ const refused = (detail) => ({
135
+ matched: false,
136
+ detail,
137
+ marker: null,
138
+ expired: false,
139
+ forged: false,
140
+ bindingRefused: true,
141
+ });
142
+ if (!Object.prototype.hasOwnProperty.call(check.marker, "claimTaskId")) {
143
+ return refused(`session approval marker for ${sessionId} carries no task binding (written by a harness release before approvals were bound to the claimed task); approve once more to bind it to ${describeClaim(readActiveClaim(generatedDir))}`);
144
+ }
145
+ const boundTo = check.marker.claimTaskId ?? null;
146
+ const current = readActiveClaim(generatedDir);
147
+ if (boundTo !== current) {
148
+ return refused(`session approval for ${sessionId} belongs to another task: it was granted for ${describeClaim(boundTo)}, the active claim is now ${describeClaim(current)}; approve the Understanding Report for this task`);
149
+ }
150
+ return { ...check, bindingRefused: false };
151
+ }
118
152
  /**
119
153
  * Shared marker resolution for the Claude and Codex understanding-gate
120
154
  * PreToolUse hooks (task e7c2ec3c): parse `approval_lifecycle` from the
@@ -139,9 +173,13 @@ export function checkOperatorApprovalMarkers(generatedDir, sessionId, packConfig
139
173
  taskCheckDetail: taskMarker.detail,
140
174
  expired: false,
141
175
  forged: false,
176
+ sessionBindingRefused: false,
142
177
  };
143
178
  }
144
- const sessionMarker = checkApprovalMarker(generatedDir, sessionId, ageOpts);
179
+ const sessionMarker = checkSessionApprovalMarker(generatedDir, sessionId, {
180
+ ...ageOpts,
181
+ taskBinding: !lifecycle.legacyMode,
182
+ });
145
183
  if (sessionMarker.matched) {
146
184
  return {
147
185
  matched: true,
@@ -150,6 +188,7 @@ export function checkOperatorApprovalMarkers(generatedDir, sessionId, packConfig
150
188
  taskCheckDetail: taskMarker.detail,
151
189
  expired: false,
152
190
  forged: false,
191
+ sessionBindingRefused: false,
153
192
  };
154
193
  }
155
194
  return {
@@ -171,6 +210,7 @@ export function checkOperatorApprovalMarkers(generatedDir, sessionId, packConfig
171
210
  // the caller even though the overall result is (correctly) unmatched
172
211
  // — mirrors the `expired` OR-merge above.
173
212
  forged: taskMarker.forged || sessionMarker.forged,
213
+ sessionBindingRefused: sessionMarker.bindingRefused,
174
214
  };
175
215
  }
176
216
  /** Clear a specific task-scoped marker. Used by the post-tool-use hook. */
@@ -1 +1 @@
1
- {"version":3,"file":"task-markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/task-markers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/task-markers.ts"],"names":[],"mappings":"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"}
@@ -249,7 +249,7 @@ export const configSchema = z
249
249
  // check on PreToolUse (`checkApprovalMarker`'s `max_age`
250
250
  // comparison), not by a PostToolUse hook — `max_age` still
251
251
  // applies under `mode: session`, which only opts out of the
252
- // PostToolUse boundary hooks.
252
+ // PostToolUse boundary hooks and the session marker's task binding.
253
253
  max_age: z.string().min(1).optional(),
254
254
  })
255
255
  .strict()
@@ -698,8 +698,9 @@ function buildHooks(runtime, pack, mode, opts = {}) {
698
698
  // PostToolUse marker-expiry (task a1348c89, widened by task
699
699
  // bea04a03). Same boundary-tool list as the Claude hook below
700
700
  // (resolveExpireOnToolMatch) so Codex expires on the identical
701
- // default set (agent-tasks task_finish / task_abandon /
702
- // pull_requests_merge / tasks_transition) — but a DIFFERENT
701
+ // configured set (agent-tasks task_finish / task_abandon /
702
+ // task_merge / pull_requests_merge / tasks_transition in the
703
+ // scaffolds), but a DIFFERENT
703
704
  // `match` builder (`codexPostToolUseMatchPattern`, not
704
705
  // `postToolUseMatchPattern`): see that function's own doc comment
705
706
  // for why the Claude builder's anchored regex form silently
@@ -728,7 +729,7 @@ function buildHooks(runtime, pack, mode, opts = {}) {
728
729
  command: wrap(COMMAND_POST_TOOL_USE_CODEX),
729
730
  blocking: false,
730
731
  budget_ms: 2000,
731
- description: "Codex adapter: expire the approval marker AND the persisted report after a task-completion boundary tool or expire_on_bash_match shell command (default tools: agent-tasks task_finish / task_abandon / pull_requests_merge). Forces a fresh Understanding Report on the next task.",
732
+ description: "Codex adapter: expire the approval marker AND the persisted report after a task-completion boundary tool listed in approval_lifecycle.expire_on_tool_match (scaffolds: agent-tasks task_finish / task_abandon / task_merge / pull_requests_merge / tasks_transition; a task_finish that lands in review keeps the approval) or an expire_on_bash_match shell command. Forces a fresh Understanding Report on the next task.",
732
733
  };
733
734
  return [hook];
734
735
  })(),
@@ -849,8 +850,11 @@ function buildHooks(runtime, pack, mode, opts = {}) {
849
850
  // configured task-boundary tools, and (task bea04a03) on a Bash call
850
851
  // when `approval_lifecycle.expire_on_bash_match` carries at least one
851
852
  // pattern, and deletes the approval marker so the next Edit / Write /
852
- // Bash forces a fresh Understanding Report. Default tool list expires
853
- // on agent-tasks task_finish / task_abandon / pull_requests_merge.
853
+ // Bash forces a fresh Understanding Report. The runtime tool list is
854
+ // the configured expire_on_tool_match (scaffolds: agent-tasks
855
+ // task_finish / task_abandon / task_merge / pull_requests_merge /
856
+ // tasks_transition); DEFAULT_BOUNDARY_TOOL_NAMES only shapes the
857
+ // emitted matcher when no list is configured.
854
858
  // Operators on other task systems override the list via
855
859
  // config.approval_lifecycle.expire_on_tool_match; setting
856
860
  // `approval_lifecycle: { mode: session }` opts out entirely and
@@ -880,7 +884,7 @@ function buildHooks(runtime, pack, mode, opts = {}) {
880
884
  command: wrap(POST_TOOL_USE_COMMAND_CLAUDE),
881
885
  blocking: false,
882
886
  budget_ms: 2000,
883
- description: "Expire the approval marker AND the persisted report after a task-completion boundary tool or expire_on_bash_match Bash command (default tools: agent-tasks task_finish / task_abandon / pull_requests_merge). Forces a fresh Understanding Report on the next task.",
887
+ description: "Expire the approval marker AND the persisted report after a task-completion boundary tool listed in approval_lifecycle.expire_on_tool_match (scaffolds: agent-tasks task_finish / task_abandon / task_merge / pull_requests_merge / tasks_transition; a task_finish that lands in review keeps the approval) or an expire_on_bash_match Bash command. Forces a fresh Understanding Report on the next task.",
884
888
  };
885
889
  return [hook];
886
890
  })(),