approval-md 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SPEC.md +11 -1
- package/dist/src/channels/contract.d.ts +15 -0
- package/dist/src/channels/contract.js +23 -1
- package/dist/src/channels/contract.js.map +1 -1
- package/dist/src/channels/telegram.d.ts +75 -2
- package/dist/src/channels/telegram.js +99 -6
- package/dist/src/channels/telegram.js.map +1 -1
- package/dist/src/cli/channel-telegram.d.ts +14 -0
- package/dist/src/cli/channel-telegram.js +44 -2
- package/dist/src/cli/channel-telegram.js.map +1 -1
- package/dist/src/cli/help.d.ts +2 -0
- package/dist/src/cli/help.js +36 -0
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/hook.d.ts +29 -0
- package/dist/src/cli/hook.js +178 -15
- package/dist/src/cli/hook.js.map +1 -1
- package/dist/src/cli/instructions.js +9 -6
- package/dist/src/cli/instructions.js.map +1 -1
- package/dist/src/cli/main.js +9 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/study.d.ts +22 -0
- package/dist/src/cli/study.js +153 -0
- package/dist/src/cli/study.js.map +1 -0
- package/dist/src/cli/verb-registry.d.ts +14 -0
- package/dist/src/cli/verb-registry.js +37 -0
- package/dist/src/cli/verb-registry.js.map +1 -1
- package/dist/src/cli/wordmark.d.ts +2 -2
- package/dist/src/cli/wordmark.js +2 -2
- package/dist/src/core/gate.d.ts +38 -0
- package/dist/src/core/gate.js +26 -0
- package/dist/src/core/gate.js.map +1 -1
- package/dist/src/core/sender-identity.d.ts +13 -1
- package/dist/src/core/sender-identity.js +15 -0
- package/dist/src/core/sender-identity.js.map +1 -1
- package/dist/src/core/study-withdraw.d.ts +137 -0
- package/dist/src/core/study-withdraw.js +280 -0
- package/dist/src/core/study-withdraw.js.map +1 -0
- package/dist/src/daemon/git-evidence.d.ts +2 -2
- package/dist/src/daemon/git-evidence.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/docs/cli-reference.md +63 -0
- package/package.json +2 -2
- package/schema/event.schema.json +212 -0
- package/schema/fixtures/event/invalid/approval-granted-study.json +23 -0
- package/schema/fixtures/event/invalid/approval-rejected-looks-wrong-cli-channel.json +23 -0
- package/schema/fixtures/event/invalid/approval-rejected-looks-wrong-operator.json +24 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-extra-key.json +24 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-unknown-reason.json +23 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-withdrawn-email-operator.json +20 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-withdrawn-no-operator.json +19 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-withdrawn-no-ref.json +19 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-withdrawn-wrong-actor.json +20 -0
- package/schema/fixtures/event/invalid/approval-rejected-study-withdrawn-wrong-channel.json +20 -0
- package/schema/fixtures/event/invalid/approval-revoked-study.json +20 -0
- package/schema/fixtures/event/valid/approval-rejected-looks-wrong.json +23 -0
- package/schema/fixtures/event/valid/approval-rejected-study-withdrawn.json +20 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The study operator's withdraw (APRV-527, amended SPEC.md §8, the study record).
|
|
3
|
+
*
|
|
4
|
+
* A hosted operator running a study may DENY one request that is still pending,
|
|
5
|
+
* before it can run. It is never a grant, never an edit of a decision and never
|
|
6
|
+
* a reopening: the verb calls the gate's `decide` with the constant `reject`,
|
|
7
|
+
* under the constant actor `human:study-team` on the constant channel `study`,
|
|
8
|
+
* and the record carries `payload.study {reason: "study_withdrawn", operator,
|
|
9
|
+
* ref}`. Every reader that ignores the field reads an ordinary rejection, so the
|
|
10
|
+
* requester's `wait` exits 1, the queue drops the request, and nothing executes.
|
|
11
|
+
*
|
|
12
|
+
* Four properties are load-bearing, and each is enforced here rather than by
|
|
13
|
+
* whoever calls this:
|
|
14
|
+
*
|
|
15
|
+
* 1. **Off is a no-op.** Unless the process environment holds
|
|
16
|
+
* `APPROVAL_STUDY_MODE` exactly `1`, the verb refuses `study-mode-off` before
|
|
17
|
+
* it opens the log. The value is read from the environment and never from a
|
|
18
|
+
* policy, because nothing an agent can propose into a policy file may switch
|
|
19
|
+
* it on.
|
|
20
|
+
* 2. **Pending only.** The verified log must derive `requested` for the key at
|
|
21
|
+
* this instant; anything else (granted, rejected, revoked, expired, withdrawn,
|
|
22
|
+
* never requested) is `not-pending`. `decide` then re-derives the state under
|
|
23
|
+
* its own head-moved retry, so a resident's tap that lands between this read
|
|
24
|
+
* and the append wins and the withdraw becomes `not-pending` too.
|
|
25
|
+
* 3. **A too-late withdraw is on the record.** Like `approval reject`, a
|
|
26
|
+
* refused attempt that names one request appends ONE `audit.decision_refused`
|
|
27
|
+
* (`recordRefusedDecision`, under `human:study-team` on channel `study`, with
|
|
28
|
+
* the gate's own code): the study team's attempt is a decision a person made,
|
|
29
|
+
* and an invisible refusal would be a gap in the study's own record. Nothing
|
|
30
|
+
* is appended when study mode is off, on a replay, on an ambiguous ref, on a
|
|
31
|
+
* ref or key naming no request, or on a log fault. (The gate's own lazy
|
|
32
|
+
* `approval.expired` can also land when a TTL lapses inside the read-to-append
|
|
33
|
+
* window; see SPEC.md §11.2's preamble.)
|
|
34
|
+
* 4. **Replay-safe.** The `ref` the operator supplies is matched against the
|
|
35
|
+
* verified log first, and again after a lost race, so a concurrent retry of
|
|
36
|
+
* the same `ref` (a control plane's retry after its own timeout) answers
|
|
37
|
+
* `idempotent` and appends nothing rather than a false refusal.
|
|
38
|
+
*
|
|
39
|
+
* The verb is human-only in the verb registry, so neither `approval serve` nor
|
|
40
|
+
* the MCP wrapper publishes it, and its one intended caller is a root exec on
|
|
41
|
+
* the box running as the store's own uid.
|
|
42
|
+
*/
|
|
43
|
+
import { type GateOptions, type GateRefusalCode } from "./gate.js";
|
|
44
|
+
import { type RequestState } from "./state.js";
|
|
45
|
+
/** The environment variable that switches study mode on, read from the process alone. */
|
|
46
|
+
export declare const STUDY_MODE_ENV = "APPROVAL_STUDY_MODE";
|
|
47
|
+
/** Study mode is on only when {@link STUDY_MODE_ENV} is exactly `1`. */
|
|
48
|
+
export declare function studyModeOn(env: Readonly<Record<string, string | undefined>>): boolean;
|
|
49
|
+
/** The actor every study withdrawal is recorded under (the schema pins it). */
|
|
50
|
+
export declare const STUDY_TEAM_ACTOR = "human:study-team";
|
|
51
|
+
/** The record's `channel` for a study withdrawal (the schema pins it). */
|
|
52
|
+
export declare const STUDY_CHANNEL = "study";
|
|
53
|
+
/** The record's `payload.note` for a study withdrawal. */
|
|
54
|
+
export declare const STUDY_WITHDRAW_NOTE = "withdrawn by the study team";
|
|
55
|
+
/**
|
|
56
|
+
* The operator id: 8 lowercase hex the control plane derives from the staff email with a key it
|
|
57
|
+
* alone holds (an HMAC, so a staff list cannot reverse it). Never the email; core checks the shape only.
|
|
58
|
+
*/
|
|
59
|
+
export declare const STUDY_OPERATOR_PATTERN: RegExp;
|
|
60
|
+
/** The withdraw's replay reference, minted once by the operator's tool. */
|
|
61
|
+
export declare const STUDY_REF_PATTERN: RegExp;
|
|
62
|
+
/** How many hex characters of the key's sha256 an action ref carries. */
|
|
63
|
+
export declare const STUDY_ACTION_REF_HEX = 12;
|
|
64
|
+
/** An action ref: the first {@link STUDY_ACTION_REF_HEX} hex of sha256(action key). */
|
|
65
|
+
export declare const STUDY_ACTION_REF_PATTERN: RegExp;
|
|
66
|
+
/**
|
|
67
|
+
* The short reference an operator names a request by, so that no action key
|
|
68
|
+
* (which can carry text an agent wrote) ever has to leave the box. It is the
|
|
69
|
+
* same 12 hex the Telegram listener's "Looks wrong" line prints
|
|
70
|
+
* (`studyLogRefOf`, a prefix of the callback's `actionRefOf`), so one operator
|
|
71
|
+
* vocabulary covers both study surfaces.
|
|
72
|
+
*/
|
|
73
|
+
export declare function studyActionRefOf(actionKey: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* Every way the study withdraw refuses on its own (SPEC.md §11.1 invariant 6,
|
|
76
|
+
* §11.2 `study_withdraw_refusal_codes`), in evaluation order. Only
|
|
77
|
+
* `not-pending` on a request that exists appends, and it appends one
|
|
78
|
+
* `audit.decision_refused`. A log that cannot be read or written reaches the
|
|
79
|
+
* caller under the gate's own code (`log-unreadable`, `log-torn-tail`,
|
|
80
|
+
* `log-corrupt`, `append-failed`), appends nothing, and is not a member here.
|
|
81
|
+
*/
|
|
82
|
+
export declare const STUDY_WITHDRAW_REFUSAL_CODES: readonly [
|
|
83
|
+
/** The process was not launched with `APPROVAL_STUDY_MODE=1`. Nothing was read. */
|
|
84
|
+
"study-mode-off",
|
|
85
|
+
/** The request is not pending: decided, expired, withdrawn, never requested, or lost a race. */
|
|
86
|
+
"not-pending",
|
|
87
|
+
/** An action ref names more than one pending request. Nothing was decided. */
|
|
88
|
+
"action-ref-ambiguous"];
|
|
89
|
+
export type StudyWithdrawRefusalCode = (typeof STUDY_WITHDRAW_REFUSAL_CODES)[number];
|
|
90
|
+
/** Which request to withdraw: its key, or the 12-hex ref of a pending one. Exactly one. */
|
|
91
|
+
export type StudyWithdrawTarget = {
|
|
92
|
+
actionKey: string;
|
|
93
|
+
} | {
|
|
94
|
+
actionRef: string;
|
|
95
|
+
};
|
|
96
|
+
export interface StudyWithdrawInput {
|
|
97
|
+
target: StudyWithdrawTarget;
|
|
98
|
+
/** {@link STUDY_OPERATOR_PATTERN}. Validated by the caller; the schema holds it again. */
|
|
99
|
+
operator: string;
|
|
100
|
+
/** {@link STUDY_REF_PATTERN}. Validated by the caller; the schema holds it again. */
|
|
101
|
+
ref: string;
|
|
102
|
+
}
|
|
103
|
+
export interface StudyWithdrawOptions extends GateOptions {
|
|
104
|
+
/** The environment study mode is read from. Defaults to `process.env`. */
|
|
105
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
106
|
+
}
|
|
107
|
+
export type StudyWithdrawResult = {
|
|
108
|
+
ok: true;
|
|
109
|
+
/** True when the same `ref` had already withdrawn this request: nothing was appended. */
|
|
110
|
+
idempotent: boolean;
|
|
111
|
+
/** The seq of the `approval.rejected` that withdrew it (this run's, or the earlier one's). */
|
|
112
|
+
seq: number;
|
|
113
|
+
/** The key withdrawn. For the caller's own bookkeeping; the CLI never prints it. */
|
|
114
|
+
actionKey: string;
|
|
115
|
+
} | StudyWithdrawRefusal;
|
|
116
|
+
export interface StudyWithdrawRefusal {
|
|
117
|
+
ok: false;
|
|
118
|
+
code: StudyWithdrawRefusalCode | GateRefusalCode;
|
|
119
|
+
message: string;
|
|
120
|
+
/** The derived state, on `not-pending`. */
|
|
121
|
+
state?: RequestState;
|
|
122
|
+
/**
|
|
123
|
+
* The gate's own code for the refusal, on `not-pending` for a request that
|
|
124
|
+
* exists (`already-decided`, `expired`, `request-withdrawn`, or whatever
|
|
125
|
+
* `decide` answered after a race). It is the code the audit record carries.
|
|
126
|
+
*/
|
|
127
|
+
gateCode?: GateRefusalCode;
|
|
128
|
+
/** The seq of the `audit.decision_refused` this refusal appended, when it appended one. */
|
|
129
|
+
auditSeq?: number;
|
|
130
|
+
/** How many pending requests the ref named, on `action-ref-ambiguous`. */
|
|
131
|
+
matches?: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Withdraw one pending request for the study team. See the module header for
|
|
135
|
+
* the four properties; the order of checks is normative (SPEC.md §11.2).
|
|
136
|
+
*/
|
|
137
|
+
export declare function studyWithdraw(logPath: string, input: StudyWithdrawInput, options?: StudyWithdrawOptions): StudyWithdrawResult;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The study operator's withdraw (APRV-527, amended SPEC.md §8, the study record).
|
|
3
|
+
*
|
|
4
|
+
* A hosted operator running a study may DENY one request that is still pending,
|
|
5
|
+
* before it can run. It is never a grant, never an edit of a decision and never
|
|
6
|
+
* a reopening: the verb calls the gate's `decide` with the constant `reject`,
|
|
7
|
+
* under the constant actor `human:study-team` on the constant channel `study`,
|
|
8
|
+
* and the record carries `payload.study {reason: "study_withdrawn", operator,
|
|
9
|
+
* ref}`. Every reader that ignores the field reads an ordinary rejection, so the
|
|
10
|
+
* requester's `wait` exits 1, the queue drops the request, and nothing executes.
|
|
11
|
+
*
|
|
12
|
+
* Four properties are load-bearing, and each is enforced here rather than by
|
|
13
|
+
* whoever calls this:
|
|
14
|
+
*
|
|
15
|
+
* 1. **Off is a no-op.** Unless the process environment holds
|
|
16
|
+
* `APPROVAL_STUDY_MODE` exactly `1`, the verb refuses `study-mode-off` before
|
|
17
|
+
* it opens the log. The value is read from the environment and never from a
|
|
18
|
+
* policy, because nothing an agent can propose into a policy file may switch
|
|
19
|
+
* it on.
|
|
20
|
+
* 2. **Pending only.** The verified log must derive `requested` for the key at
|
|
21
|
+
* this instant; anything else (granted, rejected, revoked, expired, withdrawn,
|
|
22
|
+
* never requested) is `not-pending`. `decide` then re-derives the state under
|
|
23
|
+
* its own head-moved retry, so a resident's tap that lands between this read
|
|
24
|
+
* and the append wins and the withdraw becomes `not-pending` too.
|
|
25
|
+
* 3. **A too-late withdraw is on the record.** Like `approval reject`, a
|
|
26
|
+
* refused attempt that names one request appends ONE `audit.decision_refused`
|
|
27
|
+
* (`recordRefusedDecision`, under `human:study-team` on channel `study`, with
|
|
28
|
+
* the gate's own code): the study team's attempt is a decision a person made,
|
|
29
|
+
* and an invisible refusal would be a gap in the study's own record. Nothing
|
|
30
|
+
* is appended when study mode is off, on a replay, on an ambiguous ref, on a
|
|
31
|
+
* ref or key naming no request, or on a log fault. (The gate's own lazy
|
|
32
|
+
* `approval.expired` can also land when a TTL lapses inside the read-to-append
|
|
33
|
+
* window; see SPEC.md §11.2's preamble.)
|
|
34
|
+
* 4. **Replay-safe.** The `ref` the operator supplies is matched against the
|
|
35
|
+
* verified log first, and again after a lost race, so a concurrent retry of
|
|
36
|
+
* the same `ref` (a control plane's retry after its own timeout) answers
|
|
37
|
+
* `idempotent` and appends nothing rather than a false refusal.
|
|
38
|
+
*
|
|
39
|
+
* The verb is human-only in the verb registry, so neither `approval serve` nor
|
|
40
|
+
* the MCP wrapper publishes it, and its one intended caller is a root exec on
|
|
41
|
+
* the box running as the store's own uid.
|
|
42
|
+
*/
|
|
43
|
+
import { createHash } from "node:crypto";
|
|
44
|
+
import { decide, readGatePolicy, readGateRecords, } from "./gate.js";
|
|
45
|
+
import { tick } from "./clock.js";
|
|
46
|
+
import { recordRefusedDecision } from "./decision-refusal.js";
|
|
47
|
+
import { requestState } from "./state.js";
|
|
48
|
+
/** The environment variable that switches study mode on, read from the process alone. */
|
|
49
|
+
export const STUDY_MODE_ENV = "APPROVAL_STUDY_MODE";
|
|
50
|
+
/** Study mode is on only when {@link STUDY_MODE_ENV} is exactly `1`. */
|
|
51
|
+
export function studyModeOn(env) {
|
|
52
|
+
return env[STUDY_MODE_ENV] === "1";
|
|
53
|
+
}
|
|
54
|
+
/** The actor every study withdrawal is recorded under (the schema pins it). */
|
|
55
|
+
export const STUDY_TEAM_ACTOR = "human:study-team";
|
|
56
|
+
/** The record's `channel` for a study withdrawal (the schema pins it). */
|
|
57
|
+
export const STUDY_CHANNEL = "study";
|
|
58
|
+
/** The record's `payload.note` for a study withdrawal. */
|
|
59
|
+
export const STUDY_WITHDRAW_NOTE = "withdrawn by the study team";
|
|
60
|
+
/**
|
|
61
|
+
* The operator id: 8 lowercase hex the control plane derives from the staff email with a key it
|
|
62
|
+
* alone holds (an HMAC, so a staff list cannot reverse it). Never the email; core checks the shape only.
|
|
63
|
+
*/
|
|
64
|
+
export const STUDY_OPERATOR_PATTERN = /^[0-9a-f]{8}$/u;
|
|
65
|
+
/** The withdraw's replay reference, minted once by the operator's tool. */
|
|
66
|
+
export const STUDY_REF_PATTERN = /^[A-Za-z0-9_-]{16,64}$/u;
|
|
67
|
+
/** How many hex characters of the key's sha256 an action ref carries. */
|
|
68
|
+
export const STUDY_ACTION_REF_HEX = 12;
|
|
69
|
+
/** An action ref: the first {@link STUDY_ACTION_REF_HEX} hex of sha256(action key). */
|
|
70
|
+
export const STUDY_ACTION_REF_PATTERN = /^[0-9a-f]{12}$/u;
|
|
71
|
+
/**
|
|
72
|
+
* The short reference an operator names a request by, so that no action key
|
|
73
|
+
* (which can carry text an agent wrote) ever has to leave the box. It is the
|
|
74
|
+
* same 12 hex the Telegram listener's "Looks wrong" line prints
|
|
75
|
+
* (`studyLogRefOf`, a prefix of the callback's `actionRefOf`), so one operator
|
|
76
|
+
* vocabulary covers both study surfaces.
|
|
77
|
+
*/
|
|
78
|
+
export function studyActionRefOf(actionKey) {
|
|
79
|
+
return createHash("sha256").update(actionKey, "utf8").digest("hex").slice(0, STUDY_ACTION_REF_HEX);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Every way the study withdraw refuses on its own (SPEC.md §11.1 invariant 6,
|
|
83
|
+
* §11.2 `study_withdraw_refusal_codes`), in evaluation order. Only
|
|
84
|
+
* `not-pending` on a request that exists appends, and it appends one
|
|
85
|
+
* `audit.decision_refused`. A log that cannot be read or written reaches the
|
|
86
|
+
* caller under the gate's own code (`log-unreadable`, `log-torn-tail`,
|
|
87
|
+
* `log-corrupt`, `append-failed`), appends nothing, and is not a member here.
|
|
88
|
+
*/
|
|
89
|
+
export const STUDY_WITHDRAW_REFUSAL_CODES = [
|
|
90
|
+
/** The process was not launched with `APPROVAL_STUDY_MODE=1`. Nothing was read. */
|
|
91
|
+
"study-mode-off",
|
|
92
|
+
/** The request is not pending: decided, expired, withdrawn, never requested, or lost a race. */
|
|
93
|
+
"not-pending",
|
|
94
|
+
/** An action ref names more than one pending request. Nothing was decided. */
|
|
95
|
+
"action-ref-ambiguous",
|
|
96
|
+
];
|
|
97
|
+
/** The gate codes that say the LOG could not be read or written: passed through, never `not-pending`. */
|
|
98
|
+
const LOG_FAULT_CODES = new Set([
|
|
99
|
+
"log-unreadable",
|
|
100
|
+
"log-torn-tail",
|
|
101
|
+
"log-corrupt",
|
|
102
|
+
"append-failed",
|
|
103
|
+
]);
|
|
104
|
+
function refusal(code, message, extra = {}) {
|
|
105
|
+
return { ok: false, code, message, ...extra };
|
|
106
|
+
}
|
|
107
|
+
function payloadOf(record) {
|
|
108
|
+
const payload = record.payload;
|
|
109
|
+
return typeof payload === "object" && payload !== null ? payload : {};
|
|
110
|
+
}
|
|
111
|
+
function studyOf(record) {
|
|
112
|
+
const study = payloadOf(record)["study"];
|
|
113
|
+
return typeof study === "object" && study !== null && !Array.isArray(study)
|
|
114
|
+
? study
|
|
115
|
+
: null;
|
|
116
|
+
}
|
|
117
|
+
/** Does the target name this key? A ref matches by its hash prefix. */
|
|
118
|
+
function targets(target, actionKey) {
|
|
119
|
+
return "actionKey" in target
|
|
120
|
+
? target.actionKey === actionKey
|
|
121
|
+
: studyActionRefOf(actionKey) === target.actionRef;
|
|
122
|
+
}
|
|
123
|
+
/** The earlier withdrawal this `ref` made of the target, if any. */
|
|
124
|
+
function replayOf(records, target, ref) {
|
|
125
|
+
for (const record of records) {
|
|
126
|
+
if (record.event !== "approval.rejected")
|
|
127
|
+
continue;
|
|
128
|
+
if (typeof record.action_key !== "string" || !targets(target, record.action_key))
|
|
129
|
+
continue;
|
|
130
|
+
const study = studyOf(record);
|
|
131
|
+
if (study === null)
|
|
132
|
+
continue;
|
|
133
|
+
if (study["reason"] === "study_withdrawn" && study["ref"] === ref)
|
|
134
|
+
return record;
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The gate's own code for a request that exists and is not pending: the code
|
|
140
|
+
* `decide` would answer, derived without calling it (a call would also write the
|
|
141
|
+
* gate's lazy expiry record).
|
|
142
|
+
*/
|
|
143
|
+
function gateCodeOf(state) {
|
|
144
|
+
if (state === "expired")
|
|
145
|
+
return "expired";
|
|
146
|
+
if (state === "withdrawn")
|
|
147
|
+
return "request-withdrawn";
|
|
148
|
+
return "already-decided";
|
|
149
|
+
}
|
|
150
|
+
/** Every key that has an `approval.requested`, in first-seen order. */
|
|
151
|
+
function requestedKeys(records) {
|
|
152
|
+
const keys = [];
|
|
153
|
+
const seen = new Set();
|
|
154
|
+
for (const record of records) {
|
|
155
|
+
if (record.event !== "approval.requested")
|
|
156
|
+
continue;
|
|
157
|
+
const key = record.action_key;
|
|
158
|
+
if (typeof key !== "string" || key.length === 0 || seen.has(key))
|
|
159
|
+
continue;
|
|
160
|
+
seen.add(key);
|
|
161
|
+
keys.push(key);
|
|
162
|
+
}
|
|
163
|
+
return keys;
|
|
164
|
+
}
|
|
165
|
+
const NOTHING = "Nothing was appended.";
|
|
166
|
+
/**
|
|
167
|
+
* Withdraw one pending request for the study team. See the module header for
|
|
168
|
+
* the four properties; the order of checks is normative (SPEC.md §11.2).
|
|
169
|
+
*/
|
|
170
|
+
export function studyWithdraw(logPath, input, options = {}) {
|
|
171
|
+
// 1. The switch, before anything is read.
|
|
172
|
+
if (!studyModeOn(options.env ?? process.env)) {
|
|
173
|
+
return refusal("study-mode-off", `study mode is off: this process was not launched with ${STUDY_MODE_ENV}=1, so no study withdrawal can be recorded. ${NOTHING}`);
|
|
174
|
+
}
|
|
175
|
+
// 2. The verified log. A read fault is the log's, never "not pending".
|
|
176
|
+
const read = readGateRecords(logPath, options.schemaDir);
|
|
177
|
+
if (!read.ok)
|
|
178
|
+
return refusal(read.code, read.message);
|
|
179
|
+
// 3. Replay: the same ref already withdrew this request.
|
|
180
|
+
const earlier = replayOf(read.records, input.target, input.ref);
|
|
181
|
+
if (earlier !== null) {
|
|
182
|
+
return {
|
|
183
|
+
ok: true,
|
|
184
|
+
idempotent: true,
|
|
185
|
+
seq: earlier.seq,
|
|
186
|
+
actionKey: earlier.action_key,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// 4. Pending, at this instant, under the policy's TTL (the same derivation
|
|
190
|
+
// `approval queue` and the gate use). A lapsed request is `not-pending` with
|
|
191
|
+
// the gate's code `expired`; the gate's lazy expiry record is not written for
|
|
192
|
+
// it here (only the audit record is).
|
|
193
|
+
const ts = tick(options);
|
|
194
|
+
const load = readGatePolicy(options);
|
|
195
|
+
const ttlMs = load.ok ? load.durations.approvalTtlMs : null;
|
|
196
|
+
// The one key the target names. A ref is resolved over every requested key:
|
|
197
|
+
// the pending ones first (so a decided card that shares a ref never shadows a
|
|
198
|
+
// pending one), then all of them, so a too-late withdraw by ref still learns
|
|
199
|
+
// which request it was too late for and can be put on the record.
|
|
200
|
+
let actionKey;
|
|
201
|
+
if ("actionKey" in input.target) {
|
|
202
|
+
actionKey = input.target.actionKey;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const target = input.target;
|
|
206
|
+
const named = requestedKeys(read.records).filter((key) => studyActionRefOf(key) === target.actionRef);
|
|
207
|
+
const pending = named.filter((key) => requestState(read.records, key, ts, ttlMs).state === "requested");
|
|
208
|
+
if (pending.length > 1) {
|
|
209
|
+
return refusal("action-ref-ambiguous", `${String(pending.length)} pending requests carry this action ref, so it names no single request. Nothing was decided. ${NOTHING}`, { matches: pending.length });
|
|
210
|
+
}
|
|
211
|
+
if (pending.length === 1) {
|
|
212
|
+
actionKey = pending[0];
|
|
213
|
+
}
|
|
214
|
+
else if (named.length === 1) {
|
|
215
|
+
actionKey = named[0];
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// No request, or several settled ones (a 48-bit collision among decided
|
|
219
|
+
// cards): there is no one request to account the attempt to.
|
|
220
|
+
return refusal("not-pending", `no pending request carries this action ref; a study withdrawal reaches only a request still awaiting a decision. ${NOTHING}`, { state: "none" });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const derivation = requestState(read.records, actionKey, ts, ttlMs);
|
|
224
|
+
if (derivation.state === "none") {
|
|
225
|
+
return refusal("not-pending", `no request carries this action key; a study withdrawal reaches only a request still awaiting a decision. ${NOTHING}`, { state: "none" });
|
|
226
|
+
}
|
|
227
|
+
if (derivation.state !== "requested") {
|
|
228
|
+
const gateCode = gateCodeOf(derivation.state);
|
|
229
|
+
return refusedOnRecord(logPath, actionKey, gateCode, `the request is not pending (state ${derivation.state}); a study withdrawal reaches only a request still awaiting a decision`, derivation.state, options);
|
|
230
|
+
}
|
|
231
|
+
// 5. The deny, through the gate's own path: human-only check, fresh
|
|
232
|
+
// derivation under the head-moved retry, schema at the write boundary,
|
|
233
|
+
// compare-and-append. The decision is a constant.
|
|
234
|
+
const decided = decide(logPath, actionKey, "reject", STUDY_TEAM_ACTOR, {
|
|
235
|
+
...options,
|
|
236
|
+
channel: STUDY_CHANNEL,
|
|
237
|
+
note: STUDY_WITHDRAW_NOTE,
|
|
238
|
+
study: { reason: "study_withdrawn", operator: input.operator, ref: input.ref },
|
|
239
|
+
});
|
|
240
|
+
if (!decided.ok) {
|
|
241
|
+
if (LOG_FAULT_CODES.has(decided.code))
|
|
242
|
+
return refusal(decided.code, decided.message);
|
|
243
|
+
// A concurrent run of this same ref may be what won the race (a control
|
|
244
|
+
// plane retrying after its own timeout): that is this withdrawal, already
|
|
245
|
+
// done, and it answers as the replay it is, with nothing written.
|
|
246
|
+
const again = readGateRecords(logPath, options.schemaDir);
|
|
247
|
+
if (!again.ok)
|
|
248
|
+
return refusal(again.code, again.message);
|
|
249
|
+
const won = replayOf(again.records, { actionKey }, input.ref);
|
|
250
|
+
if (won !== null)
|
|
251
|
+
return { ok: true, idempotent: true, seq: won.seq, actionKey };
|
|
252
|
+
// The one record the gate itself can leave here is the lazy
|
|
253
|
+
// `approval.expired` of a TTL that lapsed inside the window.
|
|
254
|
+
const lapse = decided.record === undefined
|
|
255
|
+
? ""
|
|
256
|
+
: ` (the gate recorded the lapse it derived: ${decided.record.event}, seq ${String(decided.record.seq)})`;
|
|
257
|
+
return refusedOnRecord(logPath, actionKey, decided.code, `the gate refused the withdrawal (${decided.code}): the request stopped being decidable before the study team's answer could be recorded${lapse}`, decided.state, options, decided.drift);
|
|
258
|
+
}
|
|
259
|
+
return { ok: true, idempotent: false, seq: decided.record.seq, actionKey };
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* A `not-pending` refusal for a request that exists, put on the record as
|
|
263
|
+
* `approval reject` puts one (cli/gate.ts `commandDecide`): ONE
|
|
264
|
+
* `audit.decision_refused` by the gate, naming `human:study-team` on channel
|
|
265
|
+
* `study` and the gate's own code. Best effort, as there: the refusal stands
|
|
266
|
+
* whatever the write does, and a write that failed is said in the message.
|
|
267
|
+
*/
|
|
268
|
+
function refusedOnRecord(logPath, actionKey, gateCode, why, state, options, drift) {
|
|
269
|
+
const recorded = recordRefusedDecision(logPath, { actionKey, decision: "reject", actor: STUDY_TEAM_ACTOR, channel: STUDY_CHANNEL }, { code: gateCode, message: why, ...(drift === undefined ? {} : { drift }) }, options);
|
|
270
|
+
const audit = recorded.ok ? recorded.audit : null;
|
|
271
|
+
const left = audit === null
|
|
272
|
+
? "The refused attempt could not be put on the record."
|
|
273
|
+
: `The refused attempt is on the record (audit.decision_refused, seq ${String(audit.seq)}).`;
|
|
274
|
+
return refusal("not-pending", `${why}. ${left}`, {
|
|
275
|
+
gateCode,
|
|
276
|
+
...(state === undefined ? {} : { state }),
|
|
277
|
+
...(audit === null ? {} : { auditSeq: audit.seq }),
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=study-withdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"study-withdraw.js","sourceRoot":"","sources":["../../../src/core/study-withdraw.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,9 +71,9 @@ import type { LogHead } from "../core/log.js";
|
|
|
71
71
|
* because a module that resolves its own package root differs between the source
|
|
72
72
|
* tree and the build output for no benefit at all.
|
|
73
73
|
*/
|
|
74
|
-
export declare const APPROVALD_VERSION = "0.4.
|
|
74
|
+
export declare const APPROVALD_VERSION = "0.4.7";
|
|
75
75
|
/** `user.name` on every commit this module makes. */
|
|
76
|
-
export declare const GIT_EVIDENCE_AUTHOR_NAME = "approvald 0.4.
|
|
76
|
+
export declare const GIT_EVIDENCE_AUTHOR_NAME = "approvald 0.4.7";
|
|
77
77
|
/** `user.email` on every commit: fixed, and deliberately undeliverable. */
|
|
78
78
|
export declare const GIT_EVIDENCE_AUTHOR_EMAIL = "approvald@noreply.approval.md";
|
|
79
79
|
/**
|
|
@@ -75,7 +75,7 @@ import { PAYLOAD_STORE_DIRNAME } from "../core/payload-store.js";
|
|
|
75
75
|
* because a module that resolves its own package root differs between the source
|
|
76
76
|
* tree and the build output for no benefit at all.
|
|
77
77
|
*/
|
|
78
|
-
export const APPROVALD_VERSION = "0.4.
|
|
78
|
+
export const APPROVALD_VERSION = "0.4.7";
|
|
79
79
|
/** `user.name` on every commit this module makes. */
|
|
80
80
|
export const GIT_EVIDENCE_AUTHOR_NAME = `approvald ${APPROVALD_VERSION}`;
|
|
81
81
|
/** `user.email` on every commit: fixed, and deliberately undeliverable. */
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -593,7 +593,7 @@ export function createApprovalMcpServer(options) {
|
|
|
593
593
|
const name = request.params.name;
|
|
594
594
|
const spec = byName.get(name);
|
|
595
595
|
if (spec === undefined) {
|
|
596
|
-
const human = VERB_REGISTRY.find((candidate) => toolName(candidate) === name && candidate.human_only);
|
|
596
|
+
const human = VERB_REGISTRY.find((candidate) => toolName(candidate) === name && candidate.human_only && candidate.operator_only !== true);
|
|
597
597
|
if (human !== undefined) {
|
|
598
598
|
// Checked FIRST, and the same answer for a guest as for anyone else:
|
|
599
599
|
// this verb records a human's authority, which is true of no session on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/docs/cli-reference.md
CHANGED
|
@@ -2089,6 +2089,69 @@ success {"ok":true,"task":"...","action_key":"...","state":"withdrawn",
|
|
|
2089
2089
|
refusal {"ok":false,"error":{"code":"...","message":"...","state"?:"..."}}
|
|
2090
2090
|
```
|
|
2091
2091
|
|
|
2092
|
+
## study withdraw
|
|
2093
|
+
|
|
2094
|
+
A hosted study operator DENIES one request that is still pending, before it can
|
|
2095
|
+
run (SPEC.md §8, the study record). It is the only way a `study_withdrawn`
|
|
2096
|
+
record is written: a channel may pass `looks_wrong` and nothing else.
|
|
2097
|
+
|
|
2098
|
+
**Off unless switched on at launch.** The verb refuses `study-mode-off` before it
|
|
2099
|
+
opens the log unless the process environment holds `APPROVAL_STUDY_MODE`
|
|
2100
|
+
exactly `1`. The switch is never read from a policy, because nothing an agent
|
|
2101
|
+
can propose into a policy file may turn it on. `--help` answers either way, so a
|
|
2102
|
+
control plane can probe whether the installed CLI has the verb.
|
|
2103
|
+
|
|
2104
|
+
**Deny-only, constant identity.** There is no `--as`, no decision flag and no
|
|
2105
|
+
note. The record is one `approval.rejected` by `human:study-team` on channel
|
|
2106
|
+
`study`, with `payload.note` "withdrawn by the study team" and `payload.study`
|
|
2107
|
+
`{reason: "study_withdrawn", operator, ref}`. `--operator` is 8 lowercase hex: a
|
|
2108
|
+
pseudonymous id the control plane derives from the operator's staff email under
|
|
2109
|
+
a key it alone holds (an HMAC), never the email. Core checks only its shape.
|
|
2110
|
+
|
|
2111
|
+
**Pending-only, and a too-late withdrawal is on the record.** A request that is
|
|
2112
|
+
granted, rejected, revoked, expired, withdrawn or never requested is refused
|
|
2113
|
+
`not-pending`. The gate's `decide` re-derives the state under its head-moved
|
|
2114
|
+
retry, so a resident's tap that lands between the verb's read and its append
|
|
2115
|
+
wins and the withdrawal becomes `not-pending`. The gate's own code
|
|
2116
|
+
(`already-decided`, `expired`, `request-withdrawn`, or what `decide` answered)
|
|
2117
|
+
rides as `gate_code`. As with `approval reject`, a refusal for a request that
|
|
2118
|
+
exists appends ONE `audit.decision_refused` by `system:gate`, naming
|
|
2119
|
+
`human:study-team` on channel `study` and that code, so the study's own record
|
|
2120
|
+
shows the attempt. It carries no operator id (the operator is in the control
|
|
2121
|
+
plane's log line). Nothing is appended for `study-mode-off`, a replay, an
|
|
2122
|
+
`action-ref-ambiguous`, a key or ref naming no request, or a log fault.
|
|
2123
|
+
|
|
2124
|
+
**Replay-safe.** The `--ref` is matched against the verified log first, and
|
|
2125
|
+
again when the gate refuses after a lost race, so a concurrent retry of the same
|
|
2126
|
+
ref (a control plane retrying after its own timeout) is not mistaken for a
|
|
2127
|
+
too-late one. The same ref again for the same request answers
|
|
2128
|
+
`idempotent: true` with the earlier record's seq, and appends nothing. A ref is
|
|
2129
|
+
unique per withdrawal by convention (the operator's tool mints a fresh one):
|
|
2130
|
+
the same ref on a different request is a new withdrawal.
|
|
2131
|
+
|
|
2132
|
+
**Name by key or by ref.** `--action-ref` is the first 12 hex of the SHA-256 of
|
|
2133
|
+
the action key (the same 12 hex the Telegram listener's "Looks wrong" line
|
|
2134
|
+
prints), so a control plane never has to carry an action key off the box. More
|
|
2135
|
+
than one pending request under one ref is `action-ref-ambiguous`. A ref that
|
|
2136
|
+
names no pending request but exactly one settled one is resolved to it, so a
|
|
2137
|
+
too-late withdrawal by ref is recorded against that request.
|
|
2138
|
+
|
|
2139
|
+
**Not published.** The registry marks the verb human-only, so neither `approval
|
|
2140
|
+
serve` nor `approval mcp serve` offers it, and operator-only, so the agent's
|
|
2141
|
+
guide (`approval instructions`, its `--json` and `--schemas`) does not list it. Its caller is a root exec running as
|
|
2142
|
+
the store's own uid. The Telegram listener edits the resident's card on its next
|
|
2143
|
+
cycle to "WITHDRAWN BY THE STUDY TEAM" with "withdrawn by the study team at
|
|
2144
|
+
HH:MM UTC · nothing ran", and takes the buttons away. The requester's `wait`
|
|
2145
|
+
exits 1 (rejected).
|
|
2146
|
+
|
|
2147
|
+
**`--json`** (one line; the action key is never printed):
|
|
2148
|
+
|
|
2149
|
+
```
|
|
2150
|
+
success {"ok":true,"idempotent":false,"seq":12}
|
|
2151
|
+
refusal {"ok":false,"error":{"code":"not-pending","message":"...",
|
|
2152
|
+
"state"?:"...","gate_code"?:"...","matches"?:2}}
|
|
2153
|
+
```
|
|
2154
|
+
|
|
2092
2155
|
## expire
|
|
2093
2156
|
|
|
2094
2157
|
No identity is accepted or resolved: no human decides an expiry, the clock does,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "approval-md",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"description": "Human approval for agent actions. CLI runtime for the approval.md convention (pre-release).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"better-sqlite3": "12.11.1",
|
|
60
60
|
"yaml": "2.9.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "eaa762237b6d8303ca791f70dcf9d6831dece5aa"
|
|
63
63
|
}
|