@cello-protocol/daemon 0.0.78 → 0.0.80

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.
@@ -37,6 +37,7 @@
37
37
  */
38
38
  import { type TrustSignalEnvelope } from "@cello-protocol/protocol-types";
39
39
  import type { DaemonDatabase } from "./sqlcipher-db.js";
40
+ import { type ConsentState } from "./consent-migration.js";
40
41
  import type { Logger } from "./types.js";
41
42
  /** Status lives OUTSIDE the hash — it is mutable after minting, which is exactly why it is not in
42
43
  * the preimage. If it were hashed, revoking a signal would change its hash and the directory could
@@ -75,6 +76,14 @@ export interface WalletSignalInput {
75
76
  }
76
77
  export interface WalletSignalRow extends WalletSignalInput {
77
78
  receivedAt: number;
79
+ /** M10B-D14r2 — may this be presented at all. Distinct from `defaultPresent`, which answers the
80
+ * different question of whether to include it BY DEFAULT once it may be presented.
81
+ *
82
+ * NULLABLE, because the COLUMN is (SQLite cannot ADD COLUMN NOT NULL without a default). Declaring
83
+ * it non-null would be a type that lies to every future consumer — and the consumer who then
84
+ * writes `!== "refused"` ships a NULL straight through as presentable. The predicate tests for
85
+ * exactly `accepted`, so NULL fails closed; the type must say so too. */
86
+ consentState: ConsentState | null;
78
87
  /** True = included in the default presentation bundle. _id signals default false; everything else true. */
79
88
  defaultPresent: boolean;
80
89
  }
@@ -167,15 +176,24 @@ export declare class TrustSignalStore {
167
176
  */
168
177
  setWalletStatus(signalHash: string, status: SignalStatus): void;
169
178
  /**
170
- * The signals `agentId` may present, resolved from the ENVELOPE, not from a stored attribution:
179
+ * The signals an agent may present, resolved from the ENVELOPE, not from a stored attribution:
171
180
  * an `account`-subject row is presentable by every agent under `accountId`; an `agent`-subject row
172
181
  * only by its own subject (M10-D5/M10-D14).
173
182
  *
183
+ * **`agentPubkeyHex` is the K_local pubkey hex, NOT the daemon's device-local `agent_id`.** An
184
+ * agent-subject envelope's `subject` holds the pubkey — that is the value the directory joins on
185
+ * (`ap.k_local_pubkey = sr.subject`) — and a UUID compared against it matches nothing at all.
186
+ *
187
+ * NOTE (`DOD-END-SCOPE-FIX-1`): this method has no production callers; the live wire path is
188
+ * `listAllActive`, which now carries the agent-subject half of this scoping. Kept because it is
189
+ * the only implementation of the ACCOUNT-subject half, which is deferred behind a named
190
+ * prerequisite — the daemon holds no `accountId` anywhere in production code.
191
+ *
174
192
  * Excludes expired and non-active rows. Selective disclosure (all / some / none) is the CALLER's
175
193
  * choice on top of this — DOD-PRESENT-1; this returns what is *eligible*, never what to send.
176
194
  */
177
195
  listPresentable(opts: {
178
- agentId: string;
196
+ agentPubkeyHex: string;
179
197
  accountId: string;
180
198
  nowSec?: number;
181
199
  }): WalletSignalRow[];
@@ -198,7 +216,37 @@ export declare class TrustSignalStore {
198
216
  */
199
217
  removeWalletSignal(signalHash: string): boolean;
200
218
  /**
201
- * Active, non-expired wallet signals eligible for presentation.
219
+ * Active, non-expired wallet signals THIS agent is eligible to present — the live wire path
220
+ * (`outbound-sessions.ts`).
221
+ *
222
+ * `presentingAgentPubkeyHex` is the presenting agent's K_local pubkey hex, and it is REQUIRED.
223
+ * An `agent`-subject row is presentable only by its own subject (M10-D5/M10-D14); the wallet is
224
+ * daemon-wide and shared by every agent on the device, so without this predicate each agent
225
+ * offers every co-resident agent's agent-subject signals to its own counterparties —
226
+ * `INV-AGENT-SCOPED`, which is what `DOD-END-SCOPE-FIX-1` closes. The scoping is in the SQL, not
227
+ * a JS filter, because `include` already routes around `default_present` and a JS branch would
228
+ * route around this the same way.
229
+ *
230
+ * **`lower(subject)`, because hex has a case and this comparison is byte-exact.** SQLite `TEXT`
231
+ * uses BINARY collation, so `AABB…` and `aabb…` — the same key — do not match, and the row would
232
+ * be silently un-presented with no error. The daemon's own `k_local_pubkey` is always lowercase
233
+ * (`agent-loader.ts` derives it with `.toString("hex")`), so only the STORED side can vary, and it
234
+ * can: `putWalletSignal` already names "a directory version-skew emitting uppercase hex" as a real
235
+ * condition. Comparing case-insensitively is the correct equality for hex, not a fallback that
236
+ * papers over a mismatch.
237
+ *
238
+ * Note the residual, because it is NOT closed here: the directory's
239
+ * `JOIN agent_profiles ap ON ap.k_local_pubkey = sr.subject` is case-sensitive too, so an
240
+ * uppercase-hex subject that ever got minted would still be invisible THERE. Closing that means
241
+ * constraining the value where it is produced (the portal's mint) — which spans three components
242
+ * and is its own decision, not something to smuggle into a presentation-scoping unit.
243
+ *
244
+ * **ACCOUNT-subject rows are deliberately NOT scoped here, and that half is deferred, not done.**
245
+ * `listPresentable` scopes them on `accountId` — but the daemon holds no `accountId` anywhere in
246
+ * production code, so there is nothing to compare against and inventing one is a separate
247
+ * decision (M10B fourth review F5). Today's behavior for account rows is therefore unchanged:
248
+ * every agent on the daemon may present them, which is also what M10-D5 says for agents under the
249
+ * same account. It becomes wrong only when one daemon holds agents of two different accounts.
202
250
  *
203
251
  * Default behavior: returns only signals where `default_present = 1`.
204
252
  * `include` overrides the default — only the listed types are returned regardless of `default_present`.
@@ -206,11 +254,35 @@ export declare class TrustSignalStore {
206
254
  * Both `include` and `exclude` are type strings. Unknown types cause a validation error at the
207
255
  * IPC layer (the caller must pre-validate against listAllWalletSignals before calling this).
208
256
  */
209
- listAllActive(opts?: {
257
+ listAllActive(opts: {
258
+ presentingAgentPubkeyHex: string;
210
259
  nowSec?: number;
211
260
  include?: string[];
212
261
  exclude?: string[];
213
262
  }): WalletSignalRow[];
263
+ /**
264
+ * The distinct signal TYPES this agent could present — active, unexpired, and scoped to the
265
+ * presenting agent exactly as `listAllActive` scopes rows.
266
+ *
267
+ * Deliberately ignores `default_present`, because this answers "may this type be named in a
268
+ * filter", and `include` exists precisely to override the default. Validating a filter against
269
+ * `listAllActive`'s output would reject a type the operator holds but has defaulted off — the
270
+ * filter rejecting the thing it was built to select.
271
+ *
272
+ * The scoping is the point: the wallet is daemon-wide, so validating a filter against the whole
273
+ * wallet accepts a type only a CO-RESIDENT agent holds, and the session then presents nothing with
274
+ * no error (review MEDIUM-4).
275
+ */
276
+ listPresentableTypes(presentingAgentPubkeyHex: string, nowSec?: number): string[];
277
+ /**
278
+ * Record the subject's consent decision (D-23). The ONLY writer of this column after insert.
279
+ *
280
+ * `refused` is terminal in spirit but not enforced as one-way here: `M10B-D4` allows Bob to issue a
281
+ * CORRECTED endorsement after a refusal, and that is a NEW signal with its own hash — it does not
282
+ * reuse this row. What must never happen is a refusal being silently undone, which is why the
283
+ * migration is birth-gated rather than NULL-driven.
284
+ */
285
+ setConsentState(signalHash: string, state: ConsentState): boolean;
214
286
  /** Set the persistent default-presentation flag for a wallet signal. */
215
287
  setDefaultPresent(signalHash: string, value: boolean): boolean;
216
288
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"trust-signal-store.d.ts","sourceRoot":"","sources":["../src/trust-signal-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trust-signal-store.d.ts","sourceRoot":"","sources":["../src/trust-signal-store.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@
36
36
  * presents exactly like a known one. Adding a signal type must require no change to this file.
37
37
  */
38
38
  import { verifyTrustSignalHash } from "@cello-protocol/protocol-types";
39
+ import { migrateWalletAddConsentState, CONSENT_ACCEPTED } from "./consent-migration.js";
39
40
  export class SignalDeliveryRejected extends Error {
40
41
  reason;
41
42
  constructor(reason, detail) {
@@ -77,6 +78,17 @@ const CREATE_WALLET_SQL = `
77
78
  ${ENVELOPE_COLUMNS},
78
79
  received_at INTEGER NOT NULL,
79
80
  default_present INTEGER NOT NULL DEFAULT 1,
81
+ -- M10B-D14r2 — NULLABLE, and that is forced rather than chosen: SQLite cannot ADD COLUMN with
82
+ -- NOT NULL and no DEFAULT, so a MIGRATED database can only ever have a nullable column. Making
83
+ -- the fresh DDL stricter would give fresh installs a different schema from migrated ones, and
84
+ -- the divergence would surface only on fresh installs — i.e. on every new operator, which is the
85
+ -- worst possible audience for it. The repo's "fresh == migrated" convention wins.
86
+ --
87
+ -- Nullability costs nothing here because presentability is enforced by the PREDICATE, which tests
88
+ -- for exactly 'accepted' rather than for the absence of a bad value. NULL, '', 'ACCEPTED' and any
89
+ -- future state all fail closed by construction (§5a), so the column constraint was never what was
90
+ -- protecting the invariant.
91
+ consent_state TEXT,
80
92
  PRIMARY KEY (signal_hash)
81
93
  );
82
94
  `;
@@ -109,6 +121,11 @@ export function ensureTrustSignalSchema(db, _logger) {
109
121
  catch {
110
122
  // Column already exists — safe to ignore.
111
123
  }
124
+ // M10B-D14r2 — DELIBERATELY OUTSIDE the try/catch above. That swallow is safe for an idempotent
125
+ // ALTER whose only expected failure is "already exists"; it is NOT safe for a migration with a
126
+ // one-time backfill, where a swallowed failure leaves the daemon running against a schema it
127
+ // believes gates consent and does not. This one is birth-gated and rethrows.
128
+ migrateWalletAddConsentState(db, _logger);
112
129
  }
113
130
  const toBuf = (b) => Buffer.from(b);
114
131
  /**
@@ -133,6 +150,7 @@ const toBytes = (v) => {
133
150
  function toWalletRow(r) {
134
151
  return {
135
152
  signalHash: r.signal_hash,
153
+ consentState: r.consent_state,
136
154
  subjectKind: r.subject_kind,
137
155
  subject: r.subject,
138
156
  issuerKind: r.issuer_kind,
@@ -180,9 +198,16 @@ export class TrustSignalStore {
180
198
  const res = this.#db
181
199
  .prepare(`INSERT OR IGNORE INTO wallet_trust_signals
182
200
  (signal_hash, subject_kind, subject, issuer_kind, issuer_pubkey, type, schema_version,
183
- payload, issued_at, expires_at, supersedes_hash, status, received_at, default_present)
184
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
185
- .run(s.signalHash, s.subjectKind, s.subject, s.issuerKind, s.issuerPubkey, s.type, s.schemaVersion, toBuf(s.payload), s.issuedAt, s.expiresAt, s.supersedesHash, s.status, Date.now(), defaultPresent ? 1 : 0);
201
+ payload, issued_at, expires_at, supersedes_hash, status, received_at, default_present,
202
+ consent_state)
203
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
204
+ .run(s.signalHash, s.subjectKind, s.subject, s.issuerKind, s.issuerPubkey, s.type, s.schemaVersion, toBuf(s.payload), s.issuedAt, s.expiresAt, s.supersedesHash, s.status, Date.now(), defaultPresent ? 1 : 0,
205
+ // M10B-D14r2 / INV-CONSENT. Keys on ISSUER_KIND, never on the type string, so every future
206
+ // client-sourced type inherits consent for free (M10B-D1). An `agent`-issued signal was
207
+ // authored by somebody else ABOUT the operator and is unpresentable until they say so; a
208
+ // `portal`-issued one was minted for them, at their own action, and has no third party to
209
+ // wait for. Written at the one insert path, and the SQL predicate fails closed regardless.
210
+ s.issuerKind === "agent" ? "pending" : CONSENT_ACCEPTED);
186
211
  if (res.changes > 0) {
187
212
  this.#logger.info("signal.wallet.stored", {
188
213
  signalHash: s.signalHash, type: s.type, subjectKind: s.subjectKind, issuerKind: s.issuerKind,
@@ -234,23 +259,75 @@ export class TrustSignalStore {
234
259
  status: "active",
235
260
  });
236
261
  if (inserted) {
237
- // Mark the explicitly superseded hash (from the envelope field) as superseded.
238
- if (supersedesHash) {
239
- this.setWalletStatus(supersedesHash, "superseded");
262
+ // ⚠️ SUPERSESSION IS A DESTRUCTIVE WRITE BY A THIRD PARTY, so it is gated twice.
263
+ //
264
+ // GATE 1 — CONSENT (M10B / DOD-END-ACCEPT-1 review F1). An `issuer_kind: agent` delivery lands
265
+ // `pending` and is unpresentable, which stops a rogue endorsement being DISPLAYED. It does not
266
+ // stop it ERASING: without this gate the rogue's insert superseded the subject's own ACCEPTED
267
+ // endorsement of the same type, and Alice presented NOTHING. Consent that blocks display but
268
+ // not deletion closes half the threat Andre named. An unconsented signal supersedes nothing;
269
+ // `setConsentState` re-runs these effects if and when the subject accepts it.
270
+ //
271
+ // GATE 2 — AUTHORITY (review F2, pre-existing since M10). `supersedes_hash` was honoured
272
+ // without asking whether the new issuer is entitled to supersede the target, so any third
273
+ // party who could get one signal delivered could knock out ANY row in the wallet — including
274
+ // phone and email — just by naming its hash. Supersession now requires the SAME ISSUER: for an
275
+ // agent the key IS the identity, and for the portal it is the one logical issuer. This mirrors
276
+ // what the directory does in V54, where an unauthorised write must not change what a third
277
+ // party can present.
278
+ const consented = this.getWalletSignal(claimedHash)?.consentState === CONSENT_ACCEPTED;
279
+ if (consented) {
280
+ this.#applySupersession(envelope, claimedHash, supersedesHash);
281
+ }
282
+ else {
283
+ this.#logger.info("signal.supersede.deferred", {
284
+ signalHash: claimedHash,
285
+ issuerKind: envelope.issuer_kind,
286
+ reason: "not consented — supersession is re-evaluated on acceptance",
287
+ });
240
288
  }
241
- // Type-dedup: any OTHER active signal of the same (subject_kind, subject, type) is also
242
- // superseded by the new one — this cleans up duplicates delivered without supersedes_hash set
243
- // (e.g. the same type re-minted on a fresh portal login with no prior-hash lookup).
244
- this.#db
245
- .prepare(`UPDATE wallet_trust_signals
246
- SET status = 'superseded'
247
- WHERE subject_kind = ? AND subject = ? AND type = ?
248
- AND signal_hash != ?
249
- AND status = 'active'`)
250
- .run(envelope.subject_kind, envelope.subject, envelope.type, claimedHash);
251
289
  }
252
290
  return { stored: inserted };
253
291
  }
292
+ /**
293
+ * Apply a newly-consented signal's supersession effects, with the ISSUER-AUTHORITY check.
294
+ *
295
+ * Extracted so acceptance can re-run it: a signal that arrived `pending` supersedes nothing until
296
+ * the subject accepts it, and at that moment the same rules must apply as if it had arrived
297
+ * accepted. One implementation, so the two entry points cannot drift.
298
+ */
299
+ #applySupersession(envelope, claimedHash, supersedesHash) {
300
+ if (supersedesHash) {
301
+ const target = this.getWalletSignal(supersedesHash);
302
+ // SAME ISSUER, or refuse. A missing target is NOT an invitation to proceed (§5a): if we cannot
303
+ // see what is being superseded we cannot judge the authority, so we do not act.
304
+ const authorized = target !== null && target.issuerPubkey === envelope.issuer_pubkey;
305
+ if (authorized) {
306
+ this.setWalletStatus(supersedesHash, "superseded");
307
+ }
308
+ else {
309
+ this.#logger.warn("signal.supersede.refused", {
310
+ signalHash: claimedHash,
311
+ supersedesHash,
312
+ reason: target === null ? "target_not_held" : "issuer_mismatch",
313
+ newIssuer: envelope.issuer_pubkey.slice(0, 16),
314
+ targetIssuer: target === null ? null : target.issuerPubkey.slice(0, 16),
315
+ });
316
+ }
317
+ }
318
+ // Type-dedup: another active signal of the same (subject_kind, subject, type) is superseded by
319
+ // the new one — duplicates delivered without supersedes_hash (e.g. a type re-minted on a fresh
320
+ // portal login with no prior-hash lookup). SCOPED TO THE SAME ISSUER for the same reason: a
321
+ // stranger's endorsement is not a newer version of yours just because it shares a type string.
322
+ this.#db
323
+ .prepare(`UPDATE wallet_trust_signals
324
+ SET status = 'superseded'
325
+ WHERE subject_kind = ? AND subject = ? AND type = ?
326
+ AND signal_hash != ?
327
+ AND issuer_pubkey = ?
328
+ AND status = 'active'`)
329
+ .run(envelope.subject_kind, envelope.subject, envelope.type, claimedHash, envelope.issuer_pubkey);
330
+ }
254
331
  getWalletSignal(signalHash) {
255
332
  const row = this.#db
256
333
  .prepare("SELECT * FROM wallet_trust_signals WHERE signal_hash = ?")
@@ -293,10 +370,19 @@ export class TrustSignalStore {
293
370
  }
294
371
  }
295
372
  /**
296
- * The signals `agentId` may present, resolved from the ENVELOPE, not from a stored attribution:
373
+ * The signals an agent may present, resolved from the ENVELOPE, not from a stored attribution:
297
374
  * an `account`-subject row is presentable by every agent under `accountId`; an `agent`-subject row
298
375
  * only by its own subject (M10-D5/M10-D14).
299
376
  *
377
+ * **`agentPubkeyHex` is the K_local pubkey hex, NOT the daemon's device-local `agent_id`.** An
378
+ * agent-subject envelope's `subject` holds the pubkey — that is the value the directory joins on
379
+ * (`ap.k_local_pubkey = sr.subject`) — and a UUID compared against it matches nothing at all.
380
+ *
381
+ * NOTE (`DOD-END-SCOPE-FIX-1`): this method has no production callers; the live wire path is
382
+ * `listAllActive`, which now carries the agent-subject half of this scoping. Kept because it is
383
+ * the only implementation of the ACCOUNT-subject half, which is deferred behind a named
384
+ * prerequisite — the daemon holds no `accountId` anywhere in production code.
385
+ *
300
386
  * Excludes expired and non-active rows. Selective disclosure (all / some / none) is the CALLER's
301
387
  * choice on top of this — DOD-PRESENT-1; this returns what is *eligible*, never what to send.
302
388
  */
@@ -314,8 +400,9 @@ export class TrustSignalStore {
314
400
  WHERE status = 'active'
315
401
  AND (expires_at IS NULL OR expires_at > ?)
316
402
  AND ( (subject_kind = 'account' AND subject = ?)
317
- OR (subject_kind = 'agent' AND subject = ?) )`)
318
- .all(nowSec, opts.accountId, opts.agentId);
403
+ OR (subject_kind = 'agent' AND subject = ?) )
404
+ AND consent_state = '${CONSENT_ACCEPTED}'`)
405
+ .all(nowSec, opts.accountId, opts.agentPubkeyHex);
319
406
  return rows.map(toWalletRow);
320
407
  }
321
408
  /**
@@ -363,7 +450,37 @@ export class TrustSignalStore {
363
450
  return false;
364
451
  }
365
452
  /**
366
- * Active, non-expired wallet signals eligible for presentation.
453
+ * Active, non-expired wallet signals THIS agent is eligible to present — the live wire path
454
+ * (`outbound-sessions.ts`).
455
+ *
456
+ * `presentingAgentPubkeyHex` is the presenting agent's K_local pubkey hex, and it is REQUIRED.
457
+ * An `agent`-subject row is presentable only by its own subject (M10-D5/M10-D14); the wallet is
458
+ * daemon-wide and shared by every agent on the device, so without this predicate each agent
459
+ * offers every co-resident agent's agent-subject signals to its own counterparties —
460
+ * `INV-AGENT-SCOPED`, which is what `DOD-END-SCOPE-FIX-1` closes. The scoping is in the SQL, not
461
+ * a JS filter, because `include` already routes around `default_present` and a JS branch would
462
+ * route around this the same way.
463
+ *
464
+ * **`lower(subject)`, because hex has a case and this comparison is byte-exact.** SQLite `TEXT`
465
+ * uses BINARY collation, so `AABB…` and `aabb…` — the same key — do not match, and the row would
466
+ * be silently un-presented with no error. The daemon's own `k_local_pubkey` is always lowercase
467
+ * (`agent-loader.ts` derives it with `.toString("hex")`), so only the STORED side can vary, and it
468
+ * can: `putWalletSignal` already names "a directory version-skew emitting uppercase hex" as a real
469
+ * condition. Comparing case-insensitively is the correct equality for hex, not a fallback that
470
+ * papers over a mismatch.
471
+ *
472
+ * Note the residual, because it is NOT closed here: the directory's
473
+ * `JOIN agent_profiles ap ON ap.k_local_pubkey = sr.subject` is case-sensitive too, so an
474
+ * uppercase-hex subject that ever got minted would still be invisible THERE. Closing that means
475
+ * constraining the value where it is produced (the portal's mint) — which spans three components
476
+ * and is its own decision, not something to smuggle into a presentation-scoping unit.
477
+ *
478
+ * **ACCOUNT-subject rows are deliberately NOT scoped here, and that half is deferred, not done.**
479
+ * `listPresentable` scopes them on `accountId` — but the daemon holds no `accountId` anywhere in
480
+ * production code, so there is nothing to compare against and inventing one is a separate
481
+ * decision (M10B fourth review F5). Today's behavior for account rows is therefore unchanged:
482
+ * every agent on the daemon may present them, which is also what M10-D5 says for agents under the
483
+ * same account. It becomes wrong only when one daemon holds agents of two different accounts.
367
484
  *
368
485
  * Default behavior: returns only signals where `default_present = 1`.
369
486
  * `include` overrides the default — only the listed types are returned regardless of `default_present`.
@@ -372,20 +489,95 @@ export class TrustSignalStore {
372
489
  * IPC layer (the caller must pre-validate against listAllWalletSignals before calling this).
373
490
  */
374
491
  listAllActive(opts) {
375
- const nowSec = opts?.nowSec ?? Math.floor(Date.now() / 1000);
492
+ // ABSENT IS NOT FINE (§5a), AND SO IS MALFORMED. A caller that cannot say who is presenting gets
493
+ // a refusal, never the whole wallet: the fail-open direction here IS the defect this method was
494
+ // fixed for, and it would hand a counterparty another agent's signals with no error and no log.
495
+ //
496
+ // The SHAPE check is the half that is easy to omit and expensive to omit. An empty string is
497
+ // caught by any guard; a device-local `agent_id` UUID, an agent NAME, or uppercase hex all sail
498
+ // through a truthiness check and then match zero rows — which is indistinguishable, to every
499
+ // caller, from "this operator holds no signals". That silence is precisely the trap
500
+ // `DOD-END-SCOPE-FIX-1` exists to close, so it is closed by construction here rather than by
501
+ // remembering to pass the right thing. 32-byte Ed25519 key, lowercase hex, as `agent-loader.ts`
502
+ // produces it.
503
+ if (!/^[0-9a-f]{64}$/.test(opts.presentingAgentPubkeyHex ?? "")) {
504
+ throw new Error("listAllActive requires the presenting agent's 32-byte K_local pubkey as lowercase hex — " +
505
+ "refusing to present an unscoped wallet");
506
+ }
507
+ const nowSec = opts.nowSec ?? Math.floor(Date.now() / 1000);
376
508
  const rows = this.#db
377
509
  .prepare(`SELECT * FROM wallet_trust_signals
378
510
  WHERE status = 'active'
379
- AND (expires_at IS NULL OR expires_at > ?)`)
380
- .all(nowSec);
511
+ AND (expires_at IS NULL OR expires_at > ?)
512
+ AND (subject_kind <> 'agent' OR lower(subject) = ?)
513
+ AND consent_state = '${CONSENT_ACCEPTED}'`)
514
+ .all(nowSec, opts.presentingAgentPubkeyHex);
381
515
  const all = rows.map(toWalletRow);
382
- if (opts?.include) {
516
+ if (opts.include) {
383
517
  const set = new Set(opts.include);
384
518
  return all.filter((s) => set.has(s.type));
385
519
  }
386
- const excluded = new Set(opts?.exclude ?? []);
520
+ const excluded = new Set(opts.exclude ?? []);
387
521
  return all.filter((s) => s.defaultPresent && !excluded.has(s.type));
388
522
  }
523
+ /**
524
+ * The distinct signal TYPES this agent could present — active, unexpired, and scoped to the
525
+ * presenting agent exactly as `listAllActive` scopes rows.
526
+ *
527
+ * Deliberately ignores `default_present`, because this answers "may this type be named in a
528
+ * filter", and `include` exists precisely to override the default. Validating a filter against
529
+ * `listAllActive`'s output would reject a type the operator holds but has defaulted off — the
530
+ * filter rejecting the thing it was built to select.
531
+ *
532
+ * The scoping is the point: the wallet is daemon-wide, so validating a filter against the whole
533
+ * wallet accepts a type only a CO-RESIDENT agent holds, and the session then presents nothing with
534
+ * no error (review MEDIUM-4).
535
+ */
536
+ listPresentableTypes(presentingAgentPubkeyHex, nowSec) {
537
+ const now = nowSec ?? Math.floor(Date.now() / 1000);
538
+ const rows = this.#db
539
+ .prepare(`SELECT DISTINCT type FROM wallet_trust_signals
540
+ WHERE status = 'active'
541
+ AND (expires_at IS NULL OR expires_at > ?)
542
+ AND (subject_kind <> 'agent' OR lower(subject) = ?)
543
+ AND consent_state = '${CONSENT_ACCEPTED}'`)
544
+ .all(now, presentingAgentPubkeyHex);
545
+ return rows.map((r) => r.type);
546
+ }
547
+ /**
548
+ * Record the subject's consent decision (D-23). The ONLY writer of this column after insert.
549
+ *
550
+ * `refused` is terminal in spirit but not enforced as one-way here: `M10B-D4` allows Bob to issue a
551
+ * CORRECTED endorsement after a refusal, and that is a NEW signal with its own hash — it does not
552
+ * reuse this row. What must never happen is a refusal being silently undone, which is why the
553
+ * migration is birth-gated rather than NULL-driven.
554
+ */
555
+ setConsentState(signalHash, state) {
556
+ const res = this.#db
557
+ .prepare("UPDATE wallet_trust_signals SET consent_state = ? WHERE signal_hash = ?")
558
+ .run(state, signalHash);
559
+ if (Number(res.changes) === 0)
560
+ return false;
561
+ this.#logger.info("signal.consent.changed", { signalHash, consentState: state });
562
+ // ACCEPTANCE IS WHEN SUPERSESSION BECOMES LEGITIMATE (review F1). Delivery deliberately defers
563
+ // it — an unconsented signal must not erase a consented one — so the effects are applied here
564
+ // instead, through the SAME authority-checked path, at the moment the subject says yes. Without
565
+ // this an accepted re-issue would sit alongside the endorsement it replaces rather than
566
+ // superseding it, and the operator would present both.
567
+ if (state === CONSENT_ACCEPTED) {
568
+ const row = this.getWalletSignal(signalHash);
569
+ if (row) {
570
+ this.#applySupersession({
571
+ subject_kind: row.subjectKind,
572
+ subject: row.subject,
573
+ type: row.type,
574
+ issuer_kind: row.issuerKind,
575
+ issuer_pubkey: row.issuerPubkey,
576
+ }, signalHash, row.supersedesHash);
577
+ }
578
+ }
579
+ return true;
580
+ }
389
581
  /** Set the persistent default-presentation flag for a wallet signal. */
390
582
  setDefaultPresent(signalHash, value) {
391
583
  const res = this.#db
@@ -1 +1 @@
1
- {"version":3,"file":"trust-signal-store.js","sourceRoot":"","sources":["../src/trust-signal-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trust-signal-store.js","sourceRoot":"","sources":["../src/trust-signal-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cello-protocol/daemon",
3
- "version": "0.0.78",
3
+ "version": "0.0.80",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "engines": {
@@ -30,10 +30,10 @@
30
30
  "@signalapp/sqlcipher": "^3.3.5",
31
31
  "cbor-x": "^1.6.0",
32
32
  "it-length-prefixed": "^10.0.1",
33
- "@cello-protocol/crypto": "0.0.24",
34
- "@cello-protocol/gateway": "0.0.6",
35
- "@cello-protocol/transport": "0.0.27",
36
- "@cello-protocol/protocol-types": "0.0.26"
33
+ "@cello-protocol/gateway": "0.0.7",
34
+ "@cello-protocol/transport": "0.0.28",
35
+ "@cello-protocol/crypto": "0.0.25",
36
+ "@cello-protocol/protocol-types": "0.0.27"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^25.6.2",