patchwork-os 1.2.0-beta.2.canary.650 → 1.2.0-beta.2.canary.652

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.
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Todoist observation channel — turns live task state into grader input.
3
+ *
4
+ * The Butler ingester was merged with no way to observe anything, so its
5
+ * shadow ledger was empty and nothing could be measured. This is the first
6
+ * real channel.
7
+ *
8
+ * ## Why a connector query and not a scheduled LLM task
9
+ *
10
+ * A Claude-Desktop scheduled task was the easy route and is the wrong one: an
11
+ * LLM *gathering* observations can report `completed: true` for an errand it
12
+ * never checked. That poisons the trust ledger exactly as the LLM judge did —
13
+ * the one this repo replaced after it flipped verdicts between runs on
14
+ * identical inputs. Every value here comes from an HTTP response.
15
+ *
16
+ * ## The mapping, and the one rule that matters
17
+ *
18
+ * 200 + is_completed → completed: true a positive act
19
+ * 200 + !is_completed → stateObserved: true open, and we LOOKED
20
+ * 404 → deleted: true a positive act
21
+ * anything else → nothing at all NOT an observation
22
+ *
23
+ * That last line is the load-bearing one. 401, 429, 5xx and network failures
24
+ * yield an observation with no `stateObserved` and no `createdAt`, so the
25
+ * grader returns `unknown` / `not-observed` and the fold withholds it.
26
+ *
27
+ * Getting this wrong in either direction is a real harm and they are not
28
+ * symmetric:
29
+ *
30
+ * - reading a failure as `deleted` manufactures a NEGATIVE against a worker
31
+ * that did nothing wrong;
32
+ * - reading a failure as "observed but open" lets the staleness horizon turn
33
+ * an outage into a negative 14 days later, which is the same harm with a
34
+ * delay on it.
35
+ *
36
+ * Neither is available here: `unavailable` produces neither field.
37
+ */
38
+ import type { TodoistConnector } from "../connectors/todoist.js";
39
+ import type { ErrandObservation } from "./outcomeIngester.js";
40
+ /** A task the ingester should look up, and the ref its grade is keyed on. */
41
+ export interface TodoistErrandRef {
42
+ /** Todoist task id. */
43
+ taskId: string;
44
+ /**
45
+ * Outcome-join key, `canonicalActionRef` form. Passed in rather than derived
46
+ * here: the ref must match what the fold would compute for the action, and
47
+ * re-deriving it in a second place is how two spellings of the same key
48
+ * appear and a confirmation attaches to nothing.
49
+ */
50
+ ref: string;
51
+ /** Recipe that filed it, for attribution during review. */
52
+ recipe?: string;
53
+ }
54
+ export interface ObservationRun {
55
+ observations: ErrandObservation[];
56
+ /** Refs whose state could not be read, with the reason. Reported, never
57
+ * silently dropped — a channel that quietly skips failures looks identical
58
+ * to one with nothing to do. */
59
+ unavailable: {
60
+ ref: string;
61
+ reason: string;
62
+ }[];
63
+ }
64
+ /**
65
+ * Look up each errand's task and build grader input.
66
+ *
67
+ * Sequential rather than parallel: Todoist rate-limits, `rate_limited` maps to
68
+ * `unavailable`, and a burst that trips the limit would convert a working
69
+ * channel into a batch of non-observations. Slow and complete beats fast and
70
+ * blank for a job that runs on a schedule.
71
+ */
72
+ export declare function observeTodoistErrands(connector: Pick<TodoistConnector, "observeTask">, refs: readonly TodoistErrandRef[]): Promise<ObservationRun>;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Todoist observation channel — turns live task state into grader input.
3
+ *
4
+ * The Butler ingester was merged with no way to observe anything, so its
5
+ * shadow ledger was empty and nothing could be measured. This is the first
6
+ * real channel.
7
+ *
8
+ * ## Why a connector query and not a scheduled LLM task
9
+ *
10
+ * A Claude-Desktop scheduled task was the easy route and is the wrong one: an
11
+ * LLM *gathering* observations can report `completed: true` for an errand it
12
+ * never checked. That poisons the trust ledger exactly as the LLM judge did —
13
+ * the one this repo replaced after it flipped verdicts between runs on
14
+ * identical inputs. Every value here comes from an HTTP response.
15
+ *
16
+ * ## The mapping, and the one rule that matters
17
+ *
18
+ * 200 + is_completed → completed: true a positive act
19
+ * 200 + !is_completed → stateObserved: true open, and we LOOKED
20
+ * 404 → deleted: true a positive act
21
+ * anything else → nothing at all NOT an observation
22
+ *
23
+ * That last line is the load-bearing one. 401, 429, 5xx and network failures
24
+ * yield an observation with no `stateObserved` and no `createdAt`, so the
25
+ * grader returns `unknown` / `not-observed` and the fold withholds it.
26
+ *
27
+ * Getting this wrong in either direction is a real harm and they are not
28
+ * symmetric:
29
+ *
30
+ * - reading a failure as `deleted` manufactures a NEGATIVE against a worker
31
+ * that did nothing wrong;
32
+ * - reading a failure as "observed but open" lets the staleness horizon turn
33
+ * an outage into a negative 14 days later, which is the same harm with a
34
+ * delay on it.
35
+ *
36
+ * Neither is available here: `unavailable` produces neither field.
37
+ */
38
+ /**
39
+ * Look up each errand's task and build grader input.
40
+ *
41
+ * Sequential rather than parallel: Todoist rate-limits, `rate_limited` maps to
42
+ * `unavailable`, and a burst that trips the limit would convert a working
43
+ * channel into a batch of non-observations. Slow and complete beats fast and
44
+ * blank for a job that runs on a schedule.
45
+ */
46
+ export async function observeTodoistErrands(connector, refs) {
47
+ const observations = [];
48
+ const unavailable = [];
49
+ for (const { taskId, ref, recipe } of refs) {
50
+ let result;
51
+ try {
52
+ result = await connector.observeTask(taskId);
53
+ }
54
+ catch (err) {
55
+ // A throw is not evidence either. The connector is not supposed to
56
+ // throw here, but "it returned a shape we did not expect" must not
57
+ // become a verdict about a worker.
58
+ unavailable.push({
59
+ ref,
60
+ reason: err instanceof Error ? err.message : "threw",
61
+ });
62
+ continue;
63
+ }
64
+ if (result.kind === "deleted") {
65
+ observations.push({ ref, deleted: true, ...(recipe ? { recipe } : {}) });
66
+ continue;
67
+ }
68
+ if (result.kind === "unavailable") {
69
+ unavailable.push({ ref, reason: result.reason });
70
+ continue;
71
+ }
72
+ observations.push({
73
+ ref,
74
+ ...(recipe ? { recipe } : {}),
75
+ completed: result.completed,
76
+ createdAt: result.createdAt,
77
+ // Set ONLY on a real 200. This is what licenses the staleness rule to
78
+ // turn silence into a negative, and silence is only evidence if
79
+ // somebody was listening.
80
+ stateObserved: true,
81
+ });
82
+ }
83
+ return { observations, unavailable };
84
+ }
85
+ //# sourceMappingURL=todoistObservation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoistObservation.js","sourceRoot":"","sources":["../../src/butler/todoistObservation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AA4BH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAgD,EAChD,IAAiC;IAEjC,MAAM,YAAY,GAAwB,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAsC,EAAE,CAAC;IAE1D,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QAC3C,IAAI,MAA4D,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,mEAAmE;YACnE,mCAAmC;YACnC,WAAW,CAAC,IAAI,CAAC;gBACf,GAAG;gBACH,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;aACrD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACzE,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,YAAY,CAAC,IAAI,CAAC;YAChB,GAAG;YACH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,sEAAsE;YACtE,gEAAgE;YAChE,0BAA0B;YAC1B,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC"}
@@ -100,6 +100,39 @@ export declare class TodoistConnector extends BaseConnector {
100
100
  private buildHeaders;
101
101
  getTasks(projectId?: string, filter?: string, limit?: number): Promise<TodoistTask[]>;
102
102
  getTask(id: string): Promise<TodoistTask>;
103
+ /**
104
+ * Observe a task for outcome grading — the ONE call the Butler ingester
105
+ * makes, and deliberately not `getTask`.
106
+ *
107
+ * `getTask` throws on every failure, which collapses three different facts
108
+ * into one: the task is gone, the token expired, the network is down. The
109
+ * grader's contract is explicit that a lookup failure must be reported as
110
+ * `undefined` and never as `deleted: true` — "a transient API error that
111
+ * reads as deletion would manufacture a negative against a worker that did
112
+ * nothing wrong."
113
+ *
114
+ * So this returns a discriminated result instead of throwing:
115
+ *
116
+ * `observed` — HTTP 200. `completed` is the task's own flag.
117
+ * `deleted` — HTTP 404 ONLY. Todoist returns 404 for a deleted task,
118
+ * and `not_found` is already a distinct error code here,
119
+ * so this does not have to infer deletion from a message.
120
+ * `unavailable` — everything else: 401, 403, 429, 5xx, network. NOT an
121
+ * observation, and the caller must not treat it as one.
122
+ *
123
+ * Additive on purpose. Changing `getTask` would alter behaviour for every
124
+ * existing caller to serve one new one.
125
+ */
126
+ observeTask(id: string): Promise<{
127
+ kind: "observed";
128
+ completed: boolean;
129
+ createdAt: number;
130
+ } | {
131
+ kind: "deleted";
132
+ } | {
133
+ kind: "unavailable";
134
+ reason: string;
135
+ }>;
103
136
  createTask(content: string, projectId?: string, description?: string, dueString?: string, priority?: number, labels?: string[]): Promise<TodoistTask>;
104
137
  updateTask(id: string, content?: string, description?: string, dueString?: string, priority?: number, labels?: string[]): Promise<TodoistTask>;
105
138
  closeTask(id: string): Promise<void>;
@@ -223,6 +223,55 @@ export class TodoistConnector extends BaseConnector {
223
223
  throw new Error(result.error.message);
224
224
  return result.data;
225
225
  }
226
+ /**
227
+ * Observe a task for outcome grading — the ONE call the Butler ingester
228
+ * makes, and deliberately not `getTask`.
229
+ *
230
+ * `getTask` throws on every failure, which collapses three different facts
231
+ * into one: the task is gone, the token expired, the network is down. The
232
+ * grader's contract is explicit that a lookup failure must be reported as
233
+ * `undefined` and never as `deleted: true` — "a transient API error that
234
+ * reads as deletion would manufacture a negative against a worker that did
235
+ * nothing wrong."
236
+ *
237
+ * So this returns a discriminated result instead of throwing:
238
+ *
239
+ * `observed` — HTTP 200. `completed` is the task's own flag.
240
+ * `deleted` — HTTP 404 ONLY. Todoist returns 404 for a deleted task,
241
+ * and `not_found` is already a distinct error code here,
242
+ * so this does not have to infer deletion from a message.
243
+ * `unavailable` — everything else: 401, 403, 429, 5xx, network. NOT an
244
+ * observation, and the caller must not treat it as one.
245
+ *
246
+ * Additive on purpose. Changing `getTask` would alter behaviour for every
247
+ * existing caller to serve one new one.
248
+ */
249
+ async observeTask(id) {
250
+ const result = await this.apiCall(async (token) => {
251
+ const res = await fetch(`${TODOIST_BASE}/tasks/${id}`, {
252
+ headers: this.buildHeaders(token),
253
+ });
254
+ if (!res.ok) {
255
+ throw Object.assign(new Error(`HTTP ${res.status}`), {
256
+ status: res.status,
257
+ });
258
+ }
259
+ return res.json();
260
+ });
261
+ if ("error" in result) {
262
+ if (result.error.code === "not_found")
263
+ return { kind: "deleted" };
264
+ return { kind: "unavailable", reason: result.error.code };
265
+ }
266
+ const createdAt = Date.parse(result.data.created_at);
267
+ return {
268
+ kind: "observed",
269
+ completed: result.data.is_completed === true,
270
+ // An unparseable timestamp must not become 0 — that is 1970, which the
271
+ // staleness horizon would read as infinitely old and grade `junk`.
272
+ createdAt: Number.isFinite(createdAt) ? createdAt : Date.now(),
273
+ };
274
+ }
226
275
  async createTask(content, projectId, description, dueString, priority, labels) {
227
276
  const result = await this.apiCall(async (token) => {
228
277
  const body = { content };
@@ -1 +1 @@
1
- {"version":3,"file":"todoist.js","sourceRoot":"","sources":["../../src/connectors/todoist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"todoist.js","sourceRoot":"","sources":["../../src/connectors/todoist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * The authentication seam — ADR-0020 Phase A, and the valuable half.
3
+ *
4
+ * One interface that answers "who is making this request?", with Phase A
5
+ * (local scrypt credentials against `members.json`) behind it today and Phase
6
+ * B (OIDC, mapped on `sub`) able to slot in later WITHOUT changing any
7
+ * consumer.
8
+ *
9
+ * Phase B is built in `patchwork-control-plane`, not here — ADR-0019 reserves
10
+ * organisation identity for the non-MIT repo, and the two ADRs were written in
11
+ * the same commit with this collision unexamined. The seam, `UNATTRIBUTED` and
12
+ * the fail-soft roster default are MIT and live here. Federation does not.
13
+ *
14
+ * ## UNATTRIBUTED is a value, not an absence
15
+ *
16
+ * The single most important rule in this file, and the one a reasonable
17
+ * implementation gets wrong: when nobody has authenticated, the answer is
18
+ * `UNATTRIBUTED` — never the implicit owner.
19
+ *
20
+ * The roster fails SOFT: a missing `members.json` yields one implicit owner so
21
+ * a single-user machine keeps working. That is right for "who may act on your
22
+ * own machine". It is catastrophic for "who did this", because defaulting an
23
+ * actor to the implicit owner writes a claim about a real person into an audit
24
+ * record on no evidence. An absent `actor` already means "nobody recorded
25
+ * this" and is never backfilled; a defaulted one is indistinguishable from a
26
+ * recorded one and is a lie the record cannot walk back.
27
+ *
28
+ * So `resolveActor` returns `UNATTRIBUTED` and callers must handle it. There
29
+ * is deliberately no `?? implicitOwner()` anywhere in this module, and a test
30
+ * asserts the string never appears.
31
+ */
32
+ import type { Member } from "./members.js";
33
+ import { type Roster } from "./roster.js";
34
+ /**
35
+ * Nobody authenticated. Distinct from "authentication failed" only in that
36
+ * neither may ever be turned into a person.
37
+ */
38
+ export declare const UNATTRIBUTED: "unattributed";
39
+ export type Principal = {
40
+ kind: "member";
41
+ member: Member;
42
+ via: string;
43
+ } | {
44
+ kind: typeof UNATTRIBUTED;
45
+ };
46
+ /** Credentials presented by a caller. Extended, never replaced, by Phase B. */
47
+ export interface Presented {
48
+ memberId?: string;
49
+ password?: string;
50
+ }
51
+ /**
52
+ * One authentication method. Phase A is `LocalPasswordProvider` below; Phase B
53
+ * would add an OIDC provider behind this same shape.
54
+ *
55
+ * Returning `null` means "not my business" — no credentials of my kind were
56
+ * presented. Returning `UNATTRIBUTED` means "mine were, and they were wrong".
57
+ * The distinction matters: the first lets another provider try, the second
58
+ * must not.
59
+ */
60
+ export interface AuthProvider {
61
+ readonly name: string;
62
+ authenticate(presented: Presented, roster: Roster): Promise<Principal | null>;
63
+ }
64
+ /** Phase A: member id + password, verified against the stored scrypt record. */
65
+ export declare class LocalPasswordProvider implements AuthProvider {
66
+ private readonly credentialFor;
67
+ readonly name = "local-password";
68
+ /**
69
+ * `credentialFor` is injected rather than read from the Member type, because
70
+ * where a hash is STORED is a separate decision from how it is verified —
71
+ * and putting a password hash on the in-memory `Member` that decision
72
+ * records copy from is how a hash ends up in an audit log.
73
+ */
74
+ constructor(credentialFor: (memberId: string) => string | undefined);
75
+ authenticate(presented: Presented, roster: Roster): Promise<Principal | null>;
76
+ }
77
+ /**
78
+ * Try each provider in order; the first that claims the request decides.
79
+ *
80
+ * With no providers, or none claiming it, the answer is `UNATTRIBUTED`. That
81
+ * is the byte-identical status quo for a single-user machine with no
82
+ * credentials configured: nothing is denied here, because this module answers
83
+ * WHO, not WHETHER.
84
+ */
85
+ export declare function resolveActor(presented: Presented, roster: Roster, providers: readonly AuthProvider[]): Promise<Principal>;
86
+ /**
87
+ * The actor snapshot to stamp on a decision record, or undefined.
88
+ *
89
+ * Undefined, NOT a placeholder person. Decision records store the actor as a
90
+ * snapshot (id + kind + display name as it was) so a later rename cannot
91
+ * rewrite history; absence stays absence.
92
+ */
93
+ export declare function actorSnapshot(principal: Principal): {
94
+ id: string;
95
+ kind: Member["kind"];
96
+ displayName: string;
97
+ } | undefined;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * The authentication seam — ADR-0020 Phase A, and the valuable half.
3
+ *
4
+ * One interface that answers "who is making this request?", with Phase A
5
+ * (local scrypt credentials against `members.json`) behind it today and Phase
6
+ * B (OIDC, mapped on `sub`) able to slot in later WITHOUT changing any
7
+ * consumer.
8
+ *
9
+ * Phase B is built in `patchwork-control-plane`, not here — ADR-0019 reserves
10
+ * organisation identity for the non-MIT repo, and the two ADRs were written in
11
+ * the same commit with this collision unexamined. The seam, `UNATTRIBUTED` and
12
+ * the fail-soft roster default are MIT and live here. Federation does not.
13
+ *
14
+ * ## UNATTRIBUTED is a value, not an absence
15
+ *
16
+ * The single most important rule in this file, and the one a reasonable
17
+ * implementation gets wrong: when nobody has authenticated, the answer is
18
+ * `UNATTRIBUTED` — never the implicit owner.
19
+ *
20
+ * The roster fails SOFT: a missing `members.json` yields one implicit owner so
21
+ * a single-user machine keeps working. That is right for "who may act on your
22
+ * own machine". It is catastrophic for "who did this", because defaulting an
23
+ * actor to the implicit owner writes a claim about a real person into an audit
24
+ * record on no evidence. An absent `actor` already means "nobody recorded
25
+ * this" and is never backfilled; a defaulted one is indistinguishable from a
26
+ * recorded one and is a lie the record cannot walk back.
27
+ *
28
+ * So `resolveActor` returns `UNATTRIBUTED` and callers must handle it. There
29
+ * is deliberately no `?? implicitOwner()` anywhere in this module, and a test
30
+ * asserts the string never appears.
31
+ */
32
+ import { verifyPassword } from "./credentials.js";
33
+ import { findMember } from "./roster.js";
34
+ /**
35
+ * Nobody authenticated. Distinct from "authentication failed" only in that
36
+ * neither may ever be turned into a person.
37
+ */
38
+ export const UNATTRIBUTED = "unattributed";
39
+ /** Phase A: member id + password, verified against the stored scrypt record. */
40
+ export class LocalPasswordProvider {
41
+ credentialFor;
42
+ name = "local-password";
43
+ /**
44
+ * `credentialFor` is injected rather than read from the Member type, because
45
+ * where a hash is STORED is a separate decision from how it is verified —
46
+ * and putting a password hash on the in-memory `Member` that decision
47
+ * records copy from is how a hash ends up in an audit log.
48
+ */
49
+ constructor(credentialFor) {
50
+ this.credentialFor = credentialFor;
51
+ }
52
+ async authenticate(presented, roster) {
53
+ const { memberId, password } = presented;
54
+ if (!memberId || !password)
55
+ return null; // not our business
56
+ const member = findMember(roster, memberId);
57
+ const record = this.credentialFor(memberId);
58
+ // Both branches do the same work whether or not the member exists, so
59
+ // "no such member" and "wrong password" cost the same. Otherwise the
60
+ // response time enumerates the roster.
61
+ const stored = record ?? DUMMY_RECORD;
62
+ const ok = await verifyPassword(password, stored);
63
+ if (!ok || !member || !member.active || !record) {
64
+ // A deactivated member keeps their record and history and may do
65
+ // nothing — including authenticate.
66
+ return { kind: UNATTRIBUTED };
67
+ }
68
+ return { kind: "member", member, via: this.name };
69
+ }
70
+ }
71
+ /**
72
+ * A syntactically valid record no password verifies against, so the unknown-
73
+ * member path performs a real scrypt derivation instead of returning early.
74
+ * The salt and hash are fixed and meaningless; the point is the CPU time.
75
+ */
76
+ const DUMMY_RECORD = "scrypt$32768$8$1$AAAAAAAAAAAAAAAAAAAAAA==$" +
77
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
78
+ /**
79
+ * Try each provider in order; the first that claims the request decides.
80
+ *
81
+ * With no providers, or none claiming it, the answer is `UNATTRIBUTED`. That
82
+ * is the byte-identical status quo for a single-user machine with no
83
+ * credentials configured: nothing is denied here, because this module answers
84
+ * WHO, not WHETHER.
85
+ */
86
+ export async function resolveActor(presented, roster, providers) {
87
+ for (const p of providers) {
88
+ const result = await p.authenticate(presented, roster);
89
+ if (result !== null)
90
+ return result;
91
+ }
92
+ return { kind: UNATTRIBUTED };
93
+ }
94
+ /**
95
+ * The actor snapshot to stamp on a decision record, or undefined.
96
+ *
97
+ * Undefined, NOT a placeholder person. Decision records store the actor as a
98
+ * snapshot (id + kind + display name as it was) so a later rename cannot
99
+ * rewrite history; absence stays absence.
100
+ */
101
+ export function actorSnapshot(principal) {
102
+ if (principal.kind === UNATTRIBUTED)
103
+ return undefined;
104
+ const { id, kind, displayName } = principal.member;
105
+ return { id, kind, displayName };
106
+ }
107
+ //# sourceMappingURL=authSeam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authSeam.js","sourceRoot":"","sources":["../../src/identity/authSeam.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAuB,CAAC;AA0BpD,gFAAgF;AAChF,MAAM,OAAO,qBAAqB;IAUb;IATV,IAAI,GAAG,gBAAgB,CAAC;IAEjC;;;;;OAKG;IACH,YACmB,aAAuD;QAAvD,kBAAa,GAAb,aAAa,CAA0C;IACvE,CAAC;IAEJ,KAAK,CAAC,YAAY,CAChB,SAAoB,EACpB,MAAc;QAEd,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,CAAC,mBAAmB;QAE5D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE5C,sEAAsE;QACtE,qEAAqE;QACrE,uCAAuC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,YAAY,CAAC;QACtC,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,iEAAiE;YACjE,oCAAoC;YACpC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,YAAY,GAChB,4CAA4C;IAC5C,sFAAsF,CAAC;AAEzF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAoB,EACpB,MAAc,EACd,SAAkC;IAElC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAoB;IAEpB,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Per-member local credentials — ADR-0020 Phase A.
3
+ *
4
+ * ## Why this exists
5
+ *
6
+ * `canApproveAction` is referenced by nothing in production, and not because
7
+ * anyone forgot. The bridge authenticates ONE shared bearer token, and the
8
+ * dashboard session cookie's signed payload is literally `v1.${expiresAt}` —
9
+ * not "no subject field" but no field except expiry. Every approver is
10
+ * indistinguishable at the auth layer, so segregation of duties is
11
+ * unenforceable rather than merely unimplemented, and no decision record can
12
+ * honestly name a person.
13
+ *
14
+ * ## `crypto.scrypt`, from the standard library
15
+ *
16
+ * The dependency audit is unambiguous: no bcrypt, argon2, passport, next-auth
17
+ * or jose in this tree, direct or dev. Adding a native-compilation
18
+ * password-hashing dependency to a project that installs globally on macOS,
19
+ * Linux and Windows — and which already documents a macOS TCC symlink footgun
20
+ * around global installs — buys a marginally better KDF for a real
21
+ * cross-platform install risk. scrypt is memory-hard, in the standard library,
22
+ * and present in every runtime the bridge already targets.
23
+ *
24
+ * ## What this module does NOT do
25
+ *
26
+ * It does not read the roster, does not decide authorisation, and does not
27
+ * touch the dashboard cookie. Verifying a secret and deciding what somebody
28
+ * may do are different questions, and the cookie change touches ten consumers
29
+ * and wants its own review. This is the half with no blast radius.
30
+ */
31
+ /**
32
+ * scrypt parameters, stored per-hash rather than assumed.
33
+ *
34
+ * Encoding them in the record is what makes them changeable later: a stored
35
+ * hash that does not say how it was derived can only be verified by a
36
+ * constant, so raising the cost would silently invalidate every existing
37
+ * credential instead of upgrading it.
38
+ *
39
+ * N=2^15 with r=8, p=1 is ~32 MB of memory per verification. `maxmem` must be
40
+ * raised above Node's 32 MB default or scrypt throws at these parameters —
41
+ * a footgun that presents as "the correct password is rejected".
42
+ */
43
+ export declare const SCRYPT_PARAMS: {
44
+ readonly N: 32768;
45
+ readonly r: 8;
46
+ readonly p: 1;
47
+ };
48
+ /** Serialised credential: `scrypt$N$r$p$<saltB64>$<hashB64>`. */
49
+ export type CredentialRecord = string;
50
+ /** Hash a password for storage. A fresh 16-byte salt per call. */
51
+ export declare function hashPassword(password: string, params?: {
52
+ N: number;
53
+ r: number;
54
+ p: number;
55
+ }): Promise<CredentialRecord>;
56
+ /**
57
+ * Verify a password against a stored record.
58
+ *
59
+ * Returns false for a malformed record rather than throwing: a corrupt
60
+ * credential must read as "this password is wrong", not as an exception a
61
+ * caller might catch and treat as a pass. It is the same fail-closed reasoning
62
+ * as ADR-0016 — deciding whether an action happens defaults to no.
63
+ *
64
+ * The comparison is `timingSafeEqual` on the derived key. Lengths are checked
65
+ * first because it throws on a length mismatch, and a thrown comparison is a
66
+ * timing signal of its own.
67
+ */
68
+ export declare function verifyPassword(password: string, record: CredentialRecord): Promise<boolean>;
69
+ /** True when a string is a well-formed credential record. */
70
+ export declare function isCredentialRecord(value: unknown): value is CredentialRecord;