@engramx/idl 0.16.0-rc.18 → 0.16.0-rc.19

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/dist/engram.did CHANGED
@@ -62,6 +62,11 @@ type TokenAmount =
62
62
  Ckusdt: nat;
63
63
  Icp: nat;
64
64
  };
65
+ type TimersWake =
66
+ record {
67
+ gap: int;
68
+ needed: nat;
69
+ };
65
70
  type TimerHealth =
66
71
  record {
67
72
  alertTimerArmed: bool;
@@ -248,407 +253,412 @@ type ResyncReport =
248
253
  type Result_9 =
249
254
  variant {
250
255
  Err: Error;
251
- Ok: SignedTransaction;
256
+ Ok: vec Seat;
252
257
  };
253
- type Result_82 =
258
+ type Result_83 =
254
259
  variant {
255
260
  Err: Error;
256
261
  Ok: AgentRecord;
257
262
  };
258
- type Result_81 =
263
+ type Result_82 =
259
264
  variant {
260
265
  Err: Error;
261
266
  Ok: record {activatesAtNs: int;};
262
267
  };
263
- type Result_80 =
268
+ type Result_81 =
264
269
  variant {
265
270
  Err: Error;
266
271
  Ok: Eip712Registration;
267
272
  };
273
+ type Result_80 =
274
+ variant {
275
+ Err: Error;
276
+ Ok: CondenseResult;
277
+ };
268
278
  type Result_8 =
269
279
  variant {
270
280
  Err: Error;
271
- Ok: vec Seat;
281
+ Ok: RailHealth;
272
282
  };
273
283
  type Result_79 =
274
284
  variant {
275
285
  Err: Error;
276
- Ok: CondenseResult;
286
+ Ok: MemoryRangeExport;
277
287
  };
278
- type Result_78 =
288
+ type Result_77 =
279
289
  variant {
280
290
  Err: Error;
281
- Ok: MemoryRangeExport;
291
+ Ok: Page_25;
282
292
  };
283
293
  type Result_76 =
284
294
  variant {
285
295
  Err: Error;
286
- Ok: Page_25;
296
+ Ok: AgentWriteReview;
287
297
  };
288
298
  type Result_75 =
289
299
  variant {
290
300
  Err: Error;
291
- Ok: AgentWriteReview;
301
+ Ok: BackupMetadata;
292
302
  };
293
303
  type Result_74 =
294
304
  variant {
295
305
  Err: Error;
296
- Ok: BackupMetadata;
306
+ Ok: BackupRetention;
297
307
  };
298
308
  type Result_73 =
299
309
  variant {
300
310
  Err: Error;
301
- Ok: BackupRetention;
311
+ Ok: vec BirthRecord;
302
312
  };
303
313
  type Result_72 =
304
314
  variant {
305
315
  Err: Error;
306
- Ok: vec BirthRecord;
316
+ Ok: Brakes;
307
317
  };
308
318
  type Result_71 =
309
319
  variant {
310
320
  Err: Error;
311
- Ok: Brakes;
321
+ Ok: ChildAllowanceRow;
312
322
  };
313
323
  type Result_70 =
314
324
  variant {
315
325
  Err: Error;
316
- Ok: ChildAllowanceRow;
326
+ Ok: ChildOpening;
317
327
  };
318
328
  type Result_7 =
319
329
  variant {
320
330
  Err: Error;
321
- Ok: RailHealth;
331
+ Ok: SignatureCounts;
322
332
  };
323
333
  type Result_69 =
324
334
  variant {
325
335
  Err: Error;
326
- Ok: ChildOpening;
336
+ Ok: blob;
327
337
  };
328
338
  type Result_68 =
329
339
  variant {
330
340
  Err: Error;
331
- Ok: blob;
341
+ Ok: EvmAddresses;
332
342
  };
333
343
  type Result_67 =
334
344
  variant {
335
345
  Err: Error;
336
- Ok: EvmAddresses;
346
+ Ok: AlertStatus;
337
347
  };
338
348
  type Result_66 =
339
349
  variant {
340
350
  Err: Error;
341
- Ok: AlertStatus;
351
+ Ok: MemoryHistory;
342
352
  };
343
353
  type Result_65 =
344
354
  variant {
345
355
  Err: Error;
346
- Ok: MemoryHistory;
356
+ Ok: MemoryRetentionPolicy;
347
357
  };
348
358
  type Result_64 =
349
359
  variant {
350
360
  Err: Error;
351
- Ok: MemoryRetentionPolicy;
361
+ Ok: OwnerConsole;
352
362
  };
353
363
  type Result_63 =
354
364
  variant {
355
365
  Err: Error;
356
- Ok: OwnerConsole;
366
+ Ok: record {paths: vec text;};
357
367
  };
358
368
  type Result_62 =
359
369
  variant {
360
370
  Err: Error;
361
- Ok: record {paths: vec text;};
371
+ Ok: SigningFloorStatus;
362
372
  };
363
373
  type Result_61 =
364
374
  variant {
365
375
  Err: Error;
366
- Ok: SigningFloorStatus;
376
+ Ok: SpendCeiling;
367
377
  };
368
378
  type Result_60 =
369
379
  variant {
370
380
  Err: Error;
371
- Ok: SpendCeiling;
381
+ Ok: SpendingPolicy;
372
382
  };
373
383
  type Result_6 =
374
384
  variant {
375
385
  Err: Error;
376
- Ok: SignatureCounts;
386
+ Ok: record {returned: nat;};
377
387
  };
378
388
  type Result_59 =
379
389
  variant {
380
390
  Err: Error;
381
- Ok: SpendingPolicy;
391
+ Ok: StorageReport;
382
392
  };
383
393
  type Result_58 =
384
394
  variant {
385
395
  Err: Error;
386
- Ok: StorageReport;
396
+ Ok: WalletBalances;
387
397
  };
388
398
  type Result_57 =
389
399
  variant {
390
400
  Err: Error;
391
- Ok: WalletBalances;
401
+ Ok: WorldIdConfig;
392
402
  };
393
403
  type Result_56 =
394
404
  variant {
395
405
  Err: Error;
396
- Ok: WorldIdConfig;
406
+ Ok: WorldIdRpContext;
397
407
  };
398
408
  type Result_55 =
399
409
  variant {
400
410
  Err: Error;
401
- Ok: WorldIdRpContext;
411
+ Ok: opt text;
402
412
  };
403
413
  type Result_54 =
404
414
  variant {
405
415
  Err: Error;
406
- Ok: opt text;
416
+ Ok: bool;
407
417
  };
408
418
  type Result_53 =
409
419
  variant {
410
420
  Err: Error;
411
- Ok: bool;
421
+ Ok: text;
412
422
  };
413
423
  type Result_52 =
414
424
  variant {
415
425
  Err: Error;
416
- Ok: text;
426
+ Ok: Page_24;
417
427
  };
418
428
  type Result_51 =
419
429
  variant {
420
430
  Err: Error;
421
- Ok: Page_24;
431
+ Ok: AgentSpendToday;
422
432
  };
423
433
  type Result_50 =
424
434
  variant {
425
435
  Err: Error;
426
- Ok: AgentSpendToday;
436
+ Ok: Page_22;
427
437
  };
428
438
  type Result_5 =
429
439
  variant {
430
440
  Err: Error;
431
- Ok: record {returned: nat;};
441
+ Ok: Eip712SignatureOut;
432
442
  };
433
443
  type Result_49 =
434
444
  variant {
435
445
  Err: Error;
436
- Ok: Page_22;
446
+ Ok: Page_21;
437
447
  };
438
448
  type Result_48 =
439
449
  variant {
440
450
  Err: Error;
441
- Ok: Page_21;
451
+ Ok: RecordPage;
442
452
  };
443
453
  type Result_47 =
444
454
  variant {
445
455
  Err: Error;
446
- Ok: RecordPage;
456
+ Ok: Page_20;
447
457
  };
448
458
  type Result_46 =
449
459
  variant {
450
460
  Err: Error;
451
- Ok: Page_20;
461
+ Ok: Page_19;
452
462
  };
453
463
  type Result_45 =
454
464
  variant {
455
465
  Err: Error;
456
- Ok: Page_19;
466
+ Ok: CheckpointPage;
457
467
  };
458
468
  type Result_44 =
459
469
  variant {
460
470
  Err: Error;
461
- Ok: CheckpointPage;
471
+ Ok: Page_17;
462
472
  };
463
473
  type Result_43 =
464
474
  variant {
465
475
  Err: Error;
466
- Ok: Page_17;
476
+ Ok: Page_16;
467
477
  };
468
478
  type Result_42 =
469
479
  variant {
470
480
  Err: Error;
471
- Ok: Page_16;
481
+ Ok: Page_15;
472
482
  };
473
483
  type Result_41 =
474
484
  variant {
475
485
  Err: Error;
476
- Ok: Page_15;
486
+ Ok: Page_14;
477
487
  };
478
488
  type Result_40 =
479
489
  variant {
480
490
  Err: Error;
481
- Ok: Page_14;
491
+ Ok: Page_13;
482
492
  };
483
493
  type Result_4 =
484
494
  variant {
485
495
  Err: Error;
486
- Ok: Eip712SignatureOut;
496
+ Ok: X402SignOutcome;
487
497
  };
488
498
  type Result_39 =
489
499
  variant {
490
500
  Err: Error;
491
- Ok: Page_13;
501
+ Ok: Page_12;
492
502
  };
493
503
  type Result_38 =
494
504
  variant {
495
505
  Err: Error;
496
- Ok: Page_12;
506
+ Ok: ReceiptPage;
497
507
  };
498
508
  type Result_37 =
499
509
  variant {
500
510
  Err: Error;
501
- Ok: ReceiptPage;
511
+ Ok: Page_10;
502
512
  };
503
513
  type Result_36 =
504
514
  variant {
505
515
  Err: Error;
506
- Ok: Page_10;
516
+ Ok: LogPage;
507
517
  };
508
518
  type Result_35 =
509
519
  variant {
510
520
  Err: Error;
511
- Ok: LogPage;
521
+ Ok: Page_8;
512
522
  };
513
523
  type Result_34 =
514
524
  variant {
515
525
  Err: Error;
516
- Ok: Page_8;
526
+ Ok: Page_7;
517
527
  };
518
528
  type Result_33 =
519
529
  variant {
520
530
  Err: Error;
521
- Ok: Page_7;
531
+ Ok: Page_6;
522
532
  };
523
533
  type Result_32 =
524
534
  variant {
525
535
  Err: Error;
526
- Ok: Page_6;
536
+ Ok: PaymentSignatureCounts;
527
537
  };
528
538
  type Result_31 =
529
539
  variant {
530
540
  Err: Error;
531
- Ok: PaymentSignatureCounts;
541
+ Ok: Page_4;
532
542
  };
533
543
  type Result_30 =
534
544
  variant {
535
545
  Err: Error;
536
- Ok: Page_4;
546
+ Ok: Page_3;
537
547
  };
538
548
  type Result_3 =
539
549
  variant {
540
550
  Err: Error;
541
- Ok: X402SignOutcome;
551
+ Ok: ControlHandover;
542
552
  };
543
553
  type Result_29 =
544
554
  variant {
545
555
  Err: Error;
546
- Ok: Page_3;
556
+ Ok: Page_2;
547
557
  };
548
558
  type Result_28 =
549
559
  variant {
550
560
  Err: Error;
551
- Ok: Page_2;
561
+ Ok: Page_1;
552
562
  };
553
563
  type Result_27 =
554
564
  variant {
555
565
  Err: Error;
556
- Ok: Page_1;
566
+ Ok: Page;
557
567
  };
558
568
  type Result_26 =
559
569
  variant {
560
570
  Err: Error;
561
- Ok: Page;
571
+ Ok: AgentGrant;
562
572
  };
563
573
  type Result_25 =
564
574
  variant {
565
575
  Err: Error;
566
- Ok: AgentGrant;
576
+ Ok: principal;
567
577
  };
568
578
  type Result_24 =
569
579
  variant {
570
580
  Err: Error;
571
- Ok: principal;
581
+ Ok: EngramSessionState;
572
582
  };
573
583
  type Result_23 =
574
584
  variant {
575
585
  Err: Error;
576
- Ok: EngramSessionState;
586
+ Ok: Pairing;
577
587
  };
578
588
  type Result_22 =
579
589
  variant {
580
590
  Err: Error;
581
- Ok: Pairing;
591
+ Ok: CondensePreview;
582
592
  };
583
593
  type Result_21 =
584
594
  variant {
585
595
  Err: Error;
586
- Ok: CondensePreview;
596
+ Ok: RetentionPreview;
587
597
  };
588
598
  type Result_20 =
589
599
  variant {
590
600
  Err: Error;
591
- Ok: RetentionPreview;
601
+ Ok: vec BatchReadItem;
592
602
  };
593
603
  type Result_2 =
594
604
  variant {
595
605
  Err: Error;
596
- Ok: ControlHandover;
606
+ Ok;
597
607
  };
598
608
  type Result_19 =
599
609
  variant {
600
610
  Err: Error;
601
- Ok: vec BatchReadItem;
611
+ Ok: MemoryByteChunk;
602
612
  };
603
613
  type Result_18 =
604
614
  variant {
605
615
  Err: Error;
606
- Ok: MemoryByteChunk;
616
+ Ok: EngramEscrowRecovery;
607
617
  };
608
618
  type Result_17 =
609
619
  variant {
610
620
  Err: Error;
611
- Ok: EngramEscrowRecovery;
621
+ Ok: GuardianRecord;
612
622
  };
613
623
  type Result_16 =
614
624
  variant {
615
625
  Err: Error;
616
- Ok: GuardianRecord;
626
+ Ok: ResetReport;
617
627
  };
618
628
  type Result_15 =
619
629
  variant {
620
630
  Err: Error;
621
- Ok: ResetReport;
631
+ Ok: ResyncReport;
622
632
  };
623
633
  type Result_14 =
624
634
  variant {
625
635
  Err: Error;
626
- Ok: ResyncReport;
636
+ Ok: nat;
627
637
  };
628
638
  type Result_13 =
629
639
  variant {
630
640
  Err: Error;
631
- Ok: nat;
641
+ Ok: SessionContext;
632
642
  };
633
643
  type Result_12 =
634
644
  variant {
635
645
  Err: Error;
636
- Ok: SessionContext;
646
+ Ok: MemoryFile;
637
647
  };
638
648
  type Result_11 =
639
649
  variant {
640
650
  Err: Error;
641
- Ok: MemoryFile;
651
+ Ok: BackupRetentionReport;
642
652
  };
643
653
  type Result_10 =
644
654
  variant {
645
655
  Err: Error;
646
- Ok: BackupRetentionReport;
656
+ Ok: SignedTransaction;
647
657
  };
648
658
  type Result_1 =
649
659
  variant {
650
660
  Err: Error;
651
- Ok;
661
+ Ok: TimersWake;
652
662
  };
653
663
  type Result =
654
664
  variant {
@@ -1308,7 +1318,7 @@ type Engram =
1308
1318
  /// nomination names. That check compares the caller inside the module, where
1309
1319
  /// test/key-replacement.test.mo runs it; this body names no roster gate, because the caller holds
1310
1320
  /// no role here until the move.
1311
- acceptAgentKeyNomination: (agentKey: principal) -> (Result_82);
1321
+ acceptAgentKeyNomination: (agentKey: principal) -> (Result_83);
1312
1322
  /// Consensus transform for the alert webhook outcall: collapse the response to status-only so
1313
1323
  /// replicas agree regardless of response headers/body (we only care that the POST landed 2xx).
1314
1324
  ///
@@ -1338,7 +1348,7 @@ type Engram =
1338
1348
  /// and works while frozen; a value is 1–128 characters (an address, or a venue value such as an
1339
1349
  /// account name). The action must be registered: a destination list belongs to an action, and a
1340
1350
  /// list for no action would be a value nothing checks. The caller is the owner's app.
1341
- addEip712Destination: (typeId: blob, value: text) -> (Result_81);
1351
+ addEip712Destination: (typeId: blob, value: text) -> (Result_82);
1342
1352
  /// Register a typed-data shape as signable. Owner-only, freeze-gated (a registration is a grant
1343
1353
  /// of FUTURE authority — a frozen engram must not be able to widen what it can sign), and the
1344
1354
  /// shape is IMMUTABLE: any change mints a new typeId.
@@ -1378,7 +1388,7 @@ type Engram =
1378
1388
  };
1379
1389
  primaryType: text;
1380
1390
  verifyingContract: text;
1381
- }) -> (Result_80);
1391
+ }) -> (Result_81);
1382
1392
  /// ⟨0.16.0, L1⟩ THE ROLE-CONFLICT ARM, and why three refusals here are not the same refusal.
1383
1393
  ///
1384
1394
  /// This method had five distinct ways to say no through one `text`, and a caller could only tell
@@ -1388,7 +1398,7 @@ type Engram =
1388
1398
  /// permitted but this engram's state says no — the principal already holds an incompatible role,
1389
1399
  /// or the roster is full. Only the last is worth an agent's time to resolve.
1390
1400
  addGuardian: (guardianPrincipal: principal, name: text, permissions:
1391
- GuardianPermissions) -> (Result_1);
1401
+ GuardianPermissions) -> (Result_2);
1392
1402
  /// ⟨2026-10-21, the owner's round-11 answer b⟩ OWNER-ONLY: put a note on any entry of this
1393
1403
  /// engram's record — words, nothing else. Appends a chained `record.note` entry
1394
1404
  /// (`about=<id> note=<words>`) and keeps the note for `listRecordNotes`; answers the new entry's
@@ -1397,7 +1407,7 @@ type Engram =
1397
1407
  /// refused by `requireOwner`'s own words. Empty words, words over `RecordWords.WORDS_MAX` or
1398
1408
  /// holding a line break are `#Invalid`; an id past the head is `#NotFound`; nothing is recorded
1399
1409
  /// on any refusal.
1400
- addRecordNote: (about: nat, note: text) -> (Result_13);
1410
+ addRecordNote: (about: nat, note: text) -> (Result_14);
1401
1411
  /// Returns the write RECEIPT, not just the version.
1402
1412
  ///
1403
1413
  /// The receipt was always computed and then thrown away: MemoryRouter hands back
@@ -1429,7 +1439,7 @@ type Engram =
1429
1439
  /// Gated on requireWritesNotPaused — unlike the export. This one destroys retained entries, which
1430
1440
  /// is exactly what a guardian pause exists to hold. No action alert is raised: the operation is
1431
1441
  /// owner-initiated, owner-only, and already chained into the audit log.
1432
- applyCondense: (toSeq: nat) -> (Result_79);
1442
+ applyCondense: (toSeq: nat) -> (Result_80);
1433
1443
  /// Owner-only: activate a guardian who has registered against an invite.
1434
1444
  ///
1435
1445
  /// Until this call the guardian is `#Pending` and can do NOTHING — registering is a claim, this
@@ -1438,7 +1448,7 @@ type Engram =
1438
1448
  ///
1439
1449
  /// `#Conflict("Guardian is already active")` when there is nothing to do — the refusal says the
1440
1450
  /// state the caller asked for is the state that holds, rather than pretending it acted.
1441
- approveGuardian: (guardianPrincipal: principal) -> (Result_1);
1451
+ approveGuardian: (guardianPrincipal: principal) -> (Result_2);
1442
1452
  /// Owner-only: approve one pending over-limit request, letting the agent retry the operation
1443
1453
  /// its policy refused.
1444
1454
  ///
@@ -1459,11 +1469,11 @@ type Engram =
1459
1469
  /// Refuses `#NotFound` for an unknown id, and `#Conflict` NAMING THE STATUS when the request is
1460
1470
  /// no longer pending — already approved, denied or expired. The status is in the message because
1461
1471
  /// "not pending" is the one refusal here an owner acts on differently depending on which it is.
1462
- approveRequest: (requestId: text) -> (Result_1);
1472
+ approveRequest: (requestId: text) -> (Result_2);
1463
1473
  /// Discard a backup started by `backupInit` and never finalized. The way out of a failed upload,
1464
1474
  /// and the reason a stalled one need not occupy space indefinitely. Same gate as the rest of the
1465
1475
  /// write half: owner, or an agent holding `canAppendMemory`.
1466
- backupAbort: (backupId: text) -> (Result_1);
1476
+ backupAbort: (backupId: text) -> (Result_2);
1467
1477
  /// Close a backup started by `backupInit` and mark it usable.
1468
1478
  ///
1469
1479
  /// ⚠ ONLY THE CREATOR MAY FINALIZE — `#Refused("Not the creator of this backup")`. An agent
@@ -1476,7 +1486,7 @@ type Engram =
1476
1486
  ///
1477
1487
  /// It does NOT verify the `sha256` declared at init; see that method for what the digest is and
1478
1488
  /// is not.
1479
- backupFinalize: (backupId: text) -> (Result_1);
1489
+ backupFinalize: (backupId: text) -> (Result_2);
1480
1490
  /// Begin a chunked backup upload. Returns the `backupId` every later call in the sequence needs.
1481
1491
  ///
1482
1492
  /// **THE SEQUENCE**, which no individual signature here conveys:
@@ -1500,24 +1510,24 @@ type Engram =
1500
1510
  ///
1501
1511
  /// The write half also refuses while writes are PAUSED.
1502
1512
  backupInit: (dbType: text, backupType: BackupType, parentBackupId:
1503
- opt text, sha256: text, backupLabel: opt text) -> (Result_52);
1513
+ opt text, sha256: text, backupLabel: opt text) -> (Result_53);
1504
1514
  /// Read one chunk of a finalized backup, by index.
1505
1515
  ///
1506
1516
  /// ⚠ GATED ON `read_backup`, which is NOT the permission the upload half uses — that one is
1507
1517
  /// `canAppendMemory`. Holding one says nothing about the other, deliberately: taking a backup and
1508
1518
  /// carrying it away are different authorities.
1509
- backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_68) query;
1519
+ backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_69) query;
1510
1520
  backupPushChunk: (backupId: text, chunkIndex: nat, data: blob) ->
1511
- (Result_1);
1521
+ (Result_2);
1512
1522
  /// The OWNER cancels an agent's pending key nomination; the agent keeps its current key. Refused
1513
1523
  /// by name when the agent is unknown or has nothing pending — never a silent success.
1514
- cancelAgentKeyNomination: (agentKey: principal) -> (Result_1);
1524
+ cancelAgentKeyNomination: (agentKey: principal) -> (Result_2);
1515
1525
  /// Close a session the caller paid for: settle what was consumed, refund the remainder.
1516
1526
  ///
1517
1527
  /// PAYER-ONLY, enforced inside the gateway. This is the exit that did not exist — `endSession`
1518
1528
  /// and `forceCloseSession` were on the MARKET, which is withheld, and whose escrow subaccount is
1519
1529
  /// under a different principal entirely, so its close could never have reached these funds.
1520
- closeSession: (sessionId: text) -> (Result_1);
1530
+ closeSession: (sessionId: text) -> (Result_2);
1521
1531
  /// Convert the engram's OWN earned ckUSDC/ckUSDT into its OWN cycles, via the cashier — the
1522
1532
  /// engram-self top-up path. Owner-only; per-call cap + cooldown (irreversible); NOT freeze-gated
1523
1533
  /// (infrastructure funding). Flow: read the engram's deposit address on the cashier, move the
@@ -1539,7 +1549,7 @@ type Engram =
1539
1549
  /// ⟨2026-10-02⟩ The second parameter is NAMED `amountE6` now, as the census row above rules the
1540
1550
  /// pair — e6 base units of the token named first. A name only: Candid passes arguments by
1541
1551
  /// position, so nothing on the wire moved.
1542
- convertEarningsToCycles: (token: text, amountE6: nat) -> (Result_13);
1552
+ convertEarningsToCycles: (token: text, amountE6: nat) -> (Result_14);
1543
1553
  /// Owner-only: mint a single-use invite code an agent redeems with `pairAgent`.
1544
1554
  ///
1545
1555
  /// ⚠ READ THIS BEFORE INVITING SOMEONE BACK. Pairing is ONE-SHOT PER PRINCIPAL on
@@ -1558,7 +1568,7 @@ type Engram =
1558
1568
  /// A principal that is already a GUARDIAN cannot become an agent — a guardian is an
1559
1569
  /// independent check on agents, so one wallet must not hold both.
1560
1570
  createAgentInvite: (name: text, permissions: AgentPermissions) ->
1561
- (Result_52);
1571
+ (Result_53);
1562
1572
  /// Owner-only: mint an invite for a GUARDIAN — an independent check on agents, not a
1563
1573
  /// co-owner and not a recovery agent.
1564
1574
  ///
@@ -1581,7 +1591,7 @@ type Engram =
1581
1591
  /// So an invite that fails to redeem for that reason is not a bad code. The rule exists because
1582
1592
  /// a check must be independent of the thing it checks.
1583
1593
  createGuardianInvite: (name: text, permissions: GuardianPermissions) ->
1584
- (Result_52);
1594
+ (Result_53);
1585
1595
  /// OWNER-ONLY deletion of a stored backup.
1586
1596
  ///
1587
1597
  /// ⚠ NOT THE SAME GATE AS THE REST OF THE FAMILY, and the asymmetry is deliberate: `backupInit`,
@@ -1592,7 +1602,7 @@ type Engram =
1592
1602
  ///
1593
1603
  /// `backupAbort` is the agent's way out of a failed UPLOAD; it discards something never
1594
1604
  /// finalized. This removes a finished backup, which is a different act on a different object.
1595
- deleteBackup: (backupId: text) -> (Result_1);
1605
+ deleteBackup: (backupId: text) -> (Result_2);
1596
1606
  /// ⟨0.16.0, census §10 item 16⟩ RETURNS A REAL RECEIPT, not `R<()>`. The receipt was already
1597
1607
  /// being computed and written into the audit line — `receiptSuffix(r)` — and then discarded, so
1598
1608
  /// a caller could not cite the seq its own delete produced and had to go looking for it in a log
@@ -1608,7 +1618,7 @@ type Engram =
1608
1618
  /// Terminal: a denied request cannot be approved afterwards. Like `approveRequest` it refuses
1609
1619
  /// `#NotFound` for an unknown id and `#Conflict` when the request is no longer pending, and it
1610
1620
  /// does not change the policy — the next request over the same limit will be raised again.
1611
- denyRequest: (requestId: text, reason: text) -> (Result_1);
1621
+ denyRequest: (requestId: text, reason: text) -> (Result_2);
1612
1622
  /// ⟨2026-10-21, the owner's round-11 answer c⟩ A NEW GUARDIAN POWER, words only: an ACTIVE
1613
1623
  /// guardian disputes an agent's write. It never moves money, stops anything or changes a grant.
1614
1624
  /// Appends a chained `record.dispute` entry (`about=<id> reason=<words>`) and keeps the dispute
@@ -1624,7 +1634,7 @@ type Engram =
1624
1634
  /// WHAT: an entry the owner's review would show (`qualifiesForReview` — an agent's append or
1625
1635
  /// revision, or a paid session's append) that succeeded, still held in full by the ring.
1626
1636
  /// One dispute per guardian per write (`#Conflict`, the first stands).
1627
- disputeAgentWrite: (about: nat, reason: text) -> (Result_13);
1637
+ disputeAgentWrite: (about: nat, reason: text) -> (Result_14);
1628
1638
  /// Record that log entries [fromSeq, toSeq] were served, and return the root that proves it.
1629
1639
  ///
1630
1640
  /// This is the receipt ledgerfs Q2 requires before any of those entries may be condensed away.
@@ -1638,7 +1648,7 @@ type Engram =
1638
1648
  /// situation rather than a safety measure. It IS gated on requireMemoryAttached: a store that
1639
1649
  /// failed its integrity check must not attest anything it cannot vouch for.
1640
1650
  exportMemoryRange: (fromSeq: nat, toSeq: nat, authorFilter:
1641
- opt principal) -> (Result_78);
1651
+ opt principal) -> (Result_79);
1642
1652
  /// ⟨0.16.0, L2.2 — renamed from `guardianFreezePayments`⟩ The prefix LIED about who may call it.
1643
1653
  /// The gate is `requireOwnerOrGuardian`, and an owner freezing their own payments is the ordinary
1644
1654
  /// case — the guardian is the exceptional one. A name that says otherwise sends an owner looking
@@ -1670,7 +1680,7 @@ type Engram =
1670
1680
  ///
1671
1681
  /// ⚠ The three exclusions are a reading of intent, not a ruling: no declaration stated the scope
1672
1682
  /// before this one. If any of them is wrong, this comment is where the argument should happen.
1673
- freezePayments: () -> (Result_1);
1683
+ freezePayments: () -> (Result_2);
1674
1684
  /// ⟨2026-10-21, the owner's round-11 answer d⟩ `freezePayments` with a reason the strip and the
1675
1685
  /// guardian page show ("Sam froze payments: 'a payment I didn't expect'"). A NEW method, not an
1676
1686
  /// argument on `freezePayments`: a shipped argument tuple is frozen. Same callers, same grant, same
@@ -1678,9 +1688,9 @@ type Engram =
1678
1688
  /// pending guardian and the anonymous caller are refused by `requireOwnerOrGuardian`'s own words.
1679
1689
  /// An empty reason is no reason; a reason too long or holding a line break is `#Invalid` and the
1680
1690
  /// brake is NOT pulled — the caller pulls it with `freezePayments`, or shortens the words.
1681
- freezePaymentsWithReason: (reason: text) -> (Result_1);
1691
+ freezePaymentsWithReason: (reason: text) -> (Result_2);
1682
1692
  /// Delivery status + config readback. Owner-only (the URL is a secret).
1683
- getActionAlertStatus: () -> (Result_66) query;
1693
+ getActionAlertStatus: () -> (Result_67) query;
1684
1694
  /// Agents need to know what they may revise, so they can read it too. Whole-value config, same
1685
1695
  /// carve-out as getProtectedPaths — and kept a SEPARATE method from it deliberately (L2.2): a
1686
1696
  /// protected path and a revisable path are opposite grants, and one accessor for both would be a
@@ -1688,7 +1698,7 @@ type Engram =
1688
1698
  ///
1689
1699
  /// Refusal reason preserved from the trap: a grant is a power, and its absence and its
1690
1700
  /// concealment are different facts.
1691
- getAgentRevisablePaths: () -> (Result_62) query;
1701
+ getAgentRevisablePaths: () -> (Result_63) query;
1692
1702
  /// OWNER-ONLY: every engagement's seat weeks on this engram, with the agent's root — the day it
1693
1703
  /// paired, the days of its first and last payment signature, a 64-week map whose bit 0 is the week
1694
1704
  /// of the last one, and how many were produced. Never an amount, a recipient or a nonce.
@@ -1699,7 +1709,7 @@ type Engram =
1699
1709
  /// order. Anyone else is refused by name (`#Refused getAgentSeatWeeks: …`), never answered with an
1700
1710
  /// empty page. Paged; `total` is every engagement ever paired here (a reset keeps the rows).
1701
1711
  /// Two rows can name one root: an agent paired again after it left is a second engagement.
1702
- getAgentSeatWeeks: (start: nat, limit: nat) -> (Result_76) query;
1712
+ getAgentSeatWeeks: (start: nat, limit: nat) -> (Result_77) query;
1703
1713
  /// Owner: everything written into this engram by someone other than the owner since the last
1704
1714
  /// markAgentWritesReviewed() — agent appends/revisions AND paid-session appends (see
1705
1715
  /// qualifiesForReview for why those two families are recognised differently).
@@ -1707,7 +1717,7 @@ type Engram =
1707
1717
  /// them — the UI must page (markAgentWritesReviewed(?lastShownId)) and must NOT present 200
1708
1718
  /// as a total. `earliest` discloses ring eviction — if cursor < earliest, entries between them
1709
1719
  /// aged out of the ring (the CHAIN still proves total count; this view can't show their bodies).
1710
- getAgentWriteReview: () -> (Result_75) query;
1720
+ getAgentWriteReview: () -> (Result_76) query;
1711
1721
  /// Why anchoring is or is not advancing. PUBLIC: ungated on purpose — detecting a stalled
1712
1722
  /// engram is the point, a gated read would fail-to-empty and hand a third party fabricated zeros,
1713
1723
  /// and none of these fields is a secret — `total` is already public via getCertifiedAuditHead.
@@ -1726,7 +1736,7 @@ type Engram =
1726
1736
  /// below serves the same head WITH the subnet certificate for a caller that needs to verify it
1727
1737
  /// was signed rather than asserted.
1728
1738
  getAuditHead: () -> (AuditHead) query;
1729
- getBackupMetadata: (backupId: text) -> (Result_74) query;
1739
+ getBackupMetadata: (backupId: text) -> (Result_75) query;
1730
1740
  /// ⟨2026-10-21, the owner's round-11 answer m: a backup-retention getter⟩ How many backups of
1731
1741
  /// `dbType` each creator keeps, and whether that is the default — the read `setBackupRetention`
1732
1742
  /// lacked, so "Keeps your newest 3" showed only on the phone that last set it.
@@ -1737,7 +1747,7 @@ type Engram =
1737
1747
  /// denied"), a revoked or resigned agent, a guardian (guardians take no backups), a stranger and
1738
1748
  /// the anonymous caller. A kind the setter would refuse is `#Invalid` here too
1739
1749
  /// (`Backup.getRetention`). Records nothing (a query).
1740
- getBackupRetention: (dbType: text) -> (Result_73) query;
1750
+ getBackupRetention: (dbType: text) -> (Result_74) query;
1741
1751
  /// The cashier this engram recognises as its rent biller — `null` until the registry pushes one.
1742
1752
  ///
1743
1753
  /// PUBLIC: a payer about to send money needs to know which cashier this engram will accept credit
@@ -1752,7 +1762,7 @@ type Engram =
1752
1762
  /// from, which is the owner's to disclose, not the registry's. The certified half is at the registry
1753
1763
  /// (`getCertifiedBirth`, public, revealing only whether a fingerprint is present); the client's
1754
1764
  /// `verifyBirthChain` checks both. Refused to anyone else by the combinator (`#ownerOnly`).
1755
- getBirthChain: () -> (Result_72) query;
1765
+ getBirthChain: () -> (Result_73) query;
1756
1766
  /// ⟨2026-10-21, the owner's round-11 answer d⟩ Each brake: on or off, and while on, who pulled it
1757
1767
  /// LAST (their key and whether as owner or guardian), since when, and the reason they gave — the
1758
1768
  /// same person and time as the newest brake entry on the record (`RecordWords.BrakePull`). For the
@@ -1761,7 +1771,7 @@ type Engram =
1761
1771
  /// — an agent learns a brake is on from the refusal of what it tried, and needs no more). `pull`
1762
1772
  /// is null for a brake that is off, and for one carried on across the upgrade that added this
1763
1773
  /// read (who pulled it was not recorded then) — never a guessed pull.
1764
- getBrakes: () -> (Result_71) query;
1774
+ getBrakes: () -> (Result_72) query;
1765
1775
  /// ⟨0.16.0, L9/L10 — census row⟩ `Wire.CertifiedAuditHead`, not an anonymous record. The
1766
1776
  /// registry, market and cashier already served the shared type; the engram — the canister that
1767
1777
  /// IS the evidence product — was the one chain still answering in a shape of its own, missing
@@ -1784,11 +1794,11 @@ type Engram =
1784
1794
  /// query's state writes are discarded when it returns, and the `denied` call first written here
1785
1795
  /// recorded nothing while reading as if it did. The refusal is loud in the reply instead. WHAT
1786
1796
  /// WOULD MAKE THIS WRONG: a reason to record who asked — then this becomes an update that says so.
1787
- getChildAllowance: (agentPrincipal: principal) -> (Result_70) query;
1797
+ getChildAllowance: (agentPrincipal: principal) -> (Result_71) query;
1788
1798
  /// Owner-only, Billing-class: what opening an engram costs this engram, the balance below which an
1789
1799
  /// agent's request is refused, the balance now, and every agent's allowance. The console's cost
1790
1800
  /// sentence reads it. Cycles are owner-class information, as on the owner's console read.
1791
- getChildOpening: () -> (Result_69) query;
1801
+ getChildOpening: () -> (Result_70) query;
1792
1802
  /// Derive the shared memory-encryption key, encrypted under the caller's transport
1793
1803
  /// public key. Gated to owner + read-agents (the same principals allowed to read
1794
1804
  /// memory). The client decrypts it locally with its transport secret key.
@@ -1813,7 +1823,7 @@ type Engram =
1813
1823
  /// cost. Stated here because L7 requires the reason be readable from the interface rather than
1814
1824
  /// inferred by opening the body — which is exactly what had to happen to write this line.
1815
1825
  getEncryptedMemoryKey: (epoch: opt nat, transportPublicKey: blob) ->
1816
- (Result_68);
1826
+ (Result_69);
1817
1827
  /// ⟨0.16.0, owner ruling 2026-08-20 — option (a)⟩ `x402Support` REPORTS THE RAIL, not a constant.
1818
1828
  ///
1819
1829
  /// The card's config hardcodes `x402Support = true`, answering a buyer's question with a fact
@@ -1908,7 +1918,7 @@ type Engram =
1908
1918
  /// It refuses rather than half-answers: if either address cannot be derived the reply is
1909
1919
  /// `#Err`, never a record carrying an empty string (ic402's `getEvmAddress` answers `""` on a
1910
1920
  /// failed derivation — that is fail-to-empty on a money surface, and it stops here).
1911
- getEvmAddress: () -> (Result_67);
1921
+ getEvmAddress: () -> (Result_68);
1912
1922
  /// The owner's OWN EVM address, if they registered one — distinct from `getEvmAddress`, which is
1913
1923
  /// the address this canister derives for itself.
1914
1924
  ///
@@ -1923,7 +1933,7 @@ type Engram =
1923
1933
  /// the management canister's `ecdsa_public_key`. A query cannot await, so the round-trip is the
1924
1934
  /// cost — stated here because L7 requires the reason be readable from the interface rather than
1925
1935
  /// inferred by opening the body.
1926
- getEvmSignerAddress: () -> (Result_52);
1936
+ getEvmSignerAddress: () -> (Result_53);
1927
1937
  /// PUBLIC: where this chain begins, for the stranger deciding whether to trust it.
1928
1938
  ///
1929
1939
  /// The fourth of the four evidence methods (`getAuditHead`, `getCertifiedAuditHead`,
@@ -1932,7 +1942,7 @@ type Engram =
1932
1942
  /// cannot verify it, and nothing here identifies anybody.
1933
1943
  getGenesisNote: () -> (GenesisNote) query;
1934
1944
  /// A guardian's own channel status (their URL is their secret — each guardian sees only theirs).
1935
- getGuardianAlertStatus: () -> (Result_66) query;
1945
+ getGuardianAlertStatus: () -> (Result_67) query;
1936
1946
  /// The market this engram will accept signing requests from — `null` until the registry pushes
1937
1947
  /// one at spawn, which is why `requireMarket` refuses fleet-wide today.
1938
1948
  ///
@@ -1962,7 +1972,7 @@ type Engram =
1962
1972
  /// never renumbered: the next page starts at the last version returned plus one. Defaults
1963
1973
  /// return the whole history of any file a pre-FD engram could have held.
1964
1974
  getMemoryHistory: (path: text, start: opt nat, max: opt nat) ->
1965
- (Result_65) query;
1975
+ (Result_66) query;
1966
1976
  /// PUBLIC: the epoch alone, and deliberately nothing else (rotation study D4). A `rotatedAt[]`
1967
1977
  /// history would be a public, fleet-enumerable feed of when each owner terminated a trust
1968
1978
  /// relationship — readable by, among others, the party just terminated.
@@ -2003,7 +2013,7 @@ type Engram =
2003
2013
  /// Refusal reasons of both merge: an empty policy reads as "nothing is capped, every version kept
2004
2014
  /// forever" — a claim about what this engram will DESTROY — and an empty guard list reads as
2005
2015
  /// "nothing is held back".
2006
- getMemoryRetentionPolicy: () -> (Result_64) query;
2016
+ getMemoryRetentionPolicy: () -> (Result_65) query;
2007
2017
  /// The metrics reader this engram answers — `null` until the spawning registry names one.
2008
2018
  ///
2009
2019
  /// PUBLIC: an owner deciding whether to switch the read off needs to know who it is, and anyone
@@ -2016,7 +2026,7 @@ type Engram =
2016
2026
  /// see: the only row it can ever return is the caller's own, so "you are not a guardian here" is
2017
2027
  /// a fact about the caller, told to the caller. There is nothing to leak by omission — which is
2018
2028
  /// the test the #NotFound arm sets.
2019
- getMyGuardianStatus: () -> (Result_16) query;
2029
+ getMyGuardianStatus: () -> (Result_17) query;
2020
2030
  /// ⟨0.16.0, NEW⟩ The gated half of the status() split.
2021
2031
  ///
2022
2032
  /// Every field is bare — no masking, no `authorized` discriminator — because reaching this record
@@ -2026,7 +2036,7 @@ type Engram =
2026
2036
  /// was `nat`, then widened to `opt nat` so a refusal could be `null`, which broke every published
2027
2037
  /// client (rule 4) and bought a masked answer nobody had asked for — the census could not even
2028
2038
  /// find a consumer that read the masked `0`. Behind a gate there is nobody to mask it from.
2029
- getOwnerConsole: () -> (Result_63) query;
2039
+ getOwnerConsole: () -> (Result_64) query;
2030
2040
  /// Owner + agents only (agents need it to avoid writing protected paths).
2031
2041
  ///
2032
2042
  /// A NAMED RECORD, not a Page: the setter replaces this list wholesale, so there is no window to
@@ -2038,7 +2048,7 @@ type Engram =
2038
2048
  /// path on this engram is protected", and an agent consults this list precisely to avoid
2039
2049
  /// writing one — so a fabricated empty here does not merely misinform, it invites the write the
2040
2050
  /// list exists to prevent.
2041
- getProtectedPaths: () -> (Result_62) query;
2051
+ getProtectedPaths: () -> (Result_63) query;
2042
2052
  /// Whether the metrics reader's read is answered — `true` from birth.
2043
2053
  ///
2044
2054
  /// PUBLIC: the promise that an owner can switch this read off can be checked only if the switch
@@ -2047,7 +2057,7 @@ type Engram =
2047
2057
  /// Owner-only, Billing-class: the signing floor, the balance, one signature's price, and how many
2048
2058
  /// payment signatures the balance carries above the floor before `signX402Payment` is refused by
2049
2059
  /// name. The same numbers the check uses, so Billing can say only what the engram enforces.
2050
- getSigningFloor: () -> (Result_61) query;
2060
+ getSigningFloor: () -> (Result_62) query;
2051
2061
  /// The registry that spawned this engram, if it recorded one.
2052
2062
  ///
2053
2063
  /// PUBLIC: it is the provenance claim. An engram asserting it is part of a fleet, under that
@@ -2064,7 +2074,7 @@ type Engram =
2064
2074
  /// configuration, and the engram-wide total would also tell one agent how much the others spent.
2065
2075
  /// A refusal names this method (`Gated.gatedResult`) rather than answering null/0 — a ceiling of
2066
2076
  /// "none" and a spend of 0 are both real answers, so a fabricated one would be read as fact.
2067
- getSpendCeiling: () -> (Result_60) query;
2077
+ getSpendCeiling: () -> (Result_61) query;
2068
2078
  /// Read the caps in force for a caller.
2069
2079
  ///
2070
2080
  /// OWNER-ONLY, and this is where it diverges from the market's inbound twin, which is public.
@@ -2072,8 +2082,8 @@ type Engram =
2072
2082
  /// Here the engram serves no 402s at all: these caps are the owner's private custody
2073
2083
  /// configuration, and publishing them would tell any caller exactly how large a signing request
2074
2084
  /// can be before it needs an approval nobody is watching for.
2075
- getSpendPolicy: (caller: opt principal) -> (Result_59) query;
2076
- getStorageStats: () -> (Result_58) query;
2085
+ getSpendPolicy: (caller: opt principal) -> (Result_60) query;
2086
+ getStorageStats: () -> (Result_59) query;
2077
2087
  /// Timer arm-state. PUBLIC and deliberately so: these timers are self-arming to save cycles,
2078
2088
  /// and an optimisation nobody can verify is an optimisation nobody should trust. Cheap to read,
2079
2089
  /// leaks nothing (booleans about our own scheduling).
@@ -2110,6 +2120,10 @@ type Engram =
2110
2120
  /// PUBLIC: the same standing as the two liveness reads above. Booleans and timestamps about this
2111
2121
  /// canister's own timers — nothing about content, callers or money — and a liveness signal only
2112
2122
  /// its owner can read cannot tell a third party that the engram is still running.
2123
+ /// ⟨2026-10-28, the owner's ruling "1"⟩ The three ic402 flags read FALSE WHILE THE TIMERS ARE PAUSED.
2124
+ /// The pause's id sweep cancels ic402's sweeps, but ic402 keeps their stale ids, so its own
2125
+ /// "armed" reads would answer true for a timer that no longer exists (a fabricated answer,
2126
+ /// ADR-0002). `alertTimerArmed` needs no guard: the sweep nulls `alertTimerId` itself.
2113
2127
  getTimerHealth: () -> (TimerHealth) query;
2114
2128
  /// PUBLIC: a cap identifies no user, and a caller deserves to know the rule before it stops them.
2115
2129
  ///
@@ -2144,12 +2158,12 @@ type Engram =
2144
2158
  /// ⟨L7⟩ MARKER ADDED 2026-08-23, reasoning above UNCHANGED — this block already said "Stays an
2145
2159
  /// UPDATE, marked per L7: it awaits three ICRC-1 ledgers". It was marked in prose and invisible
2146
2160
  /// to any gate; the glyph is what `scripts/check-update-for-read.mjs` matches.
2147
- getWalletBalances: () -> (Result_57);
2161
+ getWalletBalances: () -> (Result_58);
2148
2162
  /// Refusal reason preserved, and it is the clearest case of why a masked read is worse than no
2149
2163
  /// read: three empty strings with `configured = false` is a VALID-LOOKING answer meaning "this
2150
2164
  /// engram has no World ID configuration" — handed to a caller who merely lacks a grant. The
2151
2165
  /// fabrication is indistinguishable from the truth by construction.
2152
- getWorldIdConfig: () -> (Result_56) query;
2166
+ getWorldIdConfig: () -> (Result_57) query;
2153
2167
  /// ⟨L7⟩ UPDATE, NOT QUERY: this awaits THREE system calls — `raw_rand()` for the nonce,
2154
2168
  /// `Call.signWithEcdsa` for the signature, and `worldIdRpPublicKey()` for the derived key. A
2155
2169
  /// query can do none of them.
@@ -2158,7 +2172,7 @@ type Engram =
2158
2172
  /// Valid iff the derived signer address (getWorldIdRpSignerAddress) is registered for this rp_id in
2159
2173
  /// the World Developer Portal. Short-lived (300s TTL, idkit-server's default) and single-purpose —
2160
2174
  /// it authorizes opening one verification request, nothing else.
2161
- getWorldIdRpContext: () -> (Result_55);
2175
+ getWorldIdRpContext: () -> (Result_56);
2162
2176
  /// Owner-only: the EVM address derived from the engram's dedicated World ID RP signing key (the
2163
2177
  /// "worldid-rp" tECDSA path). Register THIS address as the rp_id's signer in the World Developer
2164
2178
  /// Portal — the engram never holds or exports a private key (only threshold shares exist, on the
@@ -2168,7 +2182,7 @@ type Engram =
2168
2182
  /// awaits `worldIdRpPublicKey()` (management `ecdsa_public_key`), and it calls `denied()` on
2169
2183
  /// refusal — a state write, which a query cannot perform. So even if the key were cached this
2170
2184
  /// could not become a query without silently retiring its denial record (ADR-0002's class).
2171
- getWorldIdRpSignerAddress: () -> (Result_52);
2185
+ getWorldIdRpSignerAddress: () -> (Result_53);
2172
2186
  /// The verified IDKitResult, verbatim, as World's /api/v4/verify accepted it — the re-checkable
2173
2187
  /// artifact behind verifiedHuman. Role-gated because it carries the NULLIFIER.
2174
2188
  /// `Result<opt Text>` — and the double wrapper is the entire point, not redundancy.
@@ -2187,13 +2201,13 @@ type Engram =
2187
2201
  /// `///`, so the dead name was PUBLISHED in engram.did and pointed every client at a method the
2188
2202
  /// canister does not serve. The tombstones below and at `about()` are historical and correct as
2189
2203
  /// written; this one was present tense, which is the difference that matters.⟩
2190
- getWorldIdVerification: () -> (Result_54) query;
2204
+ getWorldIdVerification: () -> (Result_55) query;
2191
2205
  /// ⟨0.16.0, L1⟩ THE EMERGENCY FAMILY. Every refusal below is `#Refused` or `#NotFound`, and the
2192
2206
  /// absence of a `#Conflict` here is the point: these are the calls someone makes while something
2193
2207
  /// is going wrong, and the only two answers that help are "you may not do this" and "there is
2194
2208
  /// nothing by that name". A missing PERMISSION is `#Refused` rather than `#Conflict` — the
2195
2209
  /// guardian's standing is what fell short, and no change to engram state would let them through.
2196
- guardianRevokeAgent: (agentPrincipal: principal) -> (Result_1);
2210
+ guardianRevokeAgent: (agentPrincipal: principal) -> (Result_2);
2197
2211
  /// The HTTP surface: canister-info JSON, OAuth discovery documents, and the MCP route's query
2198
2212
  /// half. See the `http_request_update` twin below for what upgrades and why.
2199
2213
  ///
@@ -2262,7 +2276,7 @@ type Engram =
2262
2276
  ///
2263
2277
  /// Owner-gated because it reports on custody posture, and answered as a Result so that a
2264
2278
  /// wrong-identity caller gets a refusal rather than a bare `false` that reads as "no address yet".
2265
- isEvmAddressCached: () -> (Result_53) query;
2279
+ isEvmAddressCached: () -> (Result_54) query;
2266
2280
  /// Issue an OAuth authorization code. Called by an OAuth client's sign-in bridge
2267
2281
  /// (an `/auth/connector`-style route) after II authentication. The client then
2268
2282
  /// redirects the user's browser to `redirectUri` with `?code=<this>` so the
@@ -2270,7 +2284,7 @@ type Engram =
2270
2284
  ///
2271
2285
  /// Owner-only: only the engram owner can authorize a Connector install.
2272
2286
  issueAuthCode: (redirectUri: text, scope: text, codeChallenge: text,
2273
- clientId: opt text) -> (Result_52);
2287
+ clientId: opt text) -> (Result_53);
2274
2288
  /// ⟨0.16.0⟩ `getCycleSnapshotSource` DELETED — folded into `CycleSnapshot.source`, one label per
2275
2289
  /// ROW. A single label for a whole ring misattributes every row recorded under the other source,
2276
2290
  /// and the source flips by design (self-call first, balance on fallback). Its documentation of
@@ -2284,7 +2298,7 @@ type Engram =
2284
2298
  /// Refusal reason preserved, and it is the sharpest of this family: a masked `[]` reads as a
2285
2299
  /// DORMANT engram and corrupts retention math — a fabricated empty here does not just misinform a
2286
2300
  /// reader, it feeds a wrong number into a decision about destroying data.
2287
- listActivitySnapshots: (start: nat, limit: nat) -> (Result_51) query;
2301
+ listActivitySnapshots: (start: nat, limit: nat) -> (Result_52) query;
2288
2302
  /// ⟨2026-10-21, round 11 item l — the owner's answer "round 11: a, b, c, d, e, f, g, h, i, j, k, l,
2289
2303
  /// m."⟩ OWNER-ONLY: what each agent has spent today, beside the daily limit in force for it, so the
2290
2304
  /// agent rows can say "$0.50 of $5.00 today" where they said a count of payments. Read from the
@@ -2301,7 +2315,7 @@ type Engram =
2301
2315
  /// because the payment path keeps no figure then (`SpendCeiling.AgentSpendRow` says why).
2302
2316
  /// WHAT WOULD MAKE THIS WRONG: `x402SignFor` keeping the per-caller total by something other than
2303
2317
  /// the calling key, or under another day boundary.
2304
- listAgentSpendToday: (start: nat, limit: nat) -> (Result_50) query;
2318
+ listAgentSpendToday: (start: nat, limit: nat) -> (Result_51) query;
2305
2319
  /// ⟨0.16.0⟩ THE PAGE EXEMPLAR. Trap → `#Refused`, bare array → `Result<Page<T>>` (L1 + L3).
2306
2320
  ///
2307
2321
  /// The refusal prose that used to be `gatedTrap`'s `whyNotEmpty` argument is not lost — it is why
@@ -2316,7 +2330,7 @@ type Engram =
2316
2330
  ///
2317
2331
  /// `withheld` is 0: this roster is owner-only in whole, so there is no partial-visibility case.
2318
2332
  /// A method that filters rows by caller sets it — see L1's row-level honesty rule.
2319
- listAgents: (start: nat, limit: nat) -> (Result_49) query;
2333
+ listAgents: (start: nat, limit: nat) -> (Result_50) query;
2320
2334
  /// The GUARDIAN-audience projection of the agent roster — three fields, not the full record.
2321
2335
  ///
2322
2336
  /// Two audiences, two methods (L1/L8), rather than one method masking fields by caller: a
@@ -2328,7 +2342,7 @@ type Engram =
2328
2342
  /// Refusal reason preserved: `[]` reads as "this engram has no agents", and this is the list a
2329
2343
  /// guardian consults BEFORE REVOKING ONE. A fabricated empty here does not merely misinform —
2330
2344
  /// it tells someone acting under emergency powers that there is nothing to act on.
2331
- listAgentsForGuardian: (start: nat, limit: nat) -> (Result_48) query;
2345
+ listAgentsForGuardian: (start: nat, limit: nat) -> (Result_49) query;
2332
2346
  /// Owner-only: rows carry caller, amount, operation and free-text rationale. The SDK omits it.
2333
2347
  ///
2334
2348
  /// The optional leading filter SURVIVES the L3 reshape — ratified (census tier-2 #8) rather than
@@ -2341,7 +2355,7 @@ type Engram =
2341
2355
  ///
2342
2356
  /// Refusal reason preserved: `[]` reads as "nothing is awaiting the owner's decision".
2343
2357
  listApprovalRequests: (statusFilter: opt ApprovalStatus, start: nat,
2344
- limit: nat) -> (Result_34) query;
2358
+ limit: nat) -> (Result_35) query;
2345
2359
  /// ⟨0.16.0⟩ `total` IS THE HEAD COUNTER, and on this method that is the entire point.
2346
2360
  ///
2347
2361
  /// The audit log is a bounded RING: it trims its tail, so "rows you can read" and "entries that
@@ -2375,7 +2389,7 @@ type Engram =
2375
2389
  /// where this record switched to the hash-first rule. A sealed row costs one SHA-256 of its body
2376
2390
  /// at read time; nothing new is stored. WHAT WOULD MAKE THIS WRONG: a sealed row carrying any part
2377
2391
  /// of a body, or a stranger reaching `items` (test/record-view.test.mo pins both).
2378
- listAuditEntries: (start: nat, limit: nat) -> (Result_47) query;
2392
+ listAuditEntries: (start: nat, limit: nat) -> (Result_48) query;
2379
2393
  /// ⟨0.16.0, L1 + L3 — census-ruled⟩ THE TWO-MECHANISM EXCEPTION DISSOLVES.
2380
2394
  ///
2381
2395
  /// This method used to answer THREE ways to one question: a list, an `#Err` text, and a trap,
@@ -2399,7 +2413,7 @@ type Engram =
2399
2413
  /// `dbTypeFilter` DIES on the wire (census). The capability does not: `EngramClient.listBackups`
2400
2414
  /// keeps its optional filter and applies it to the page, so no caller loses the ability to ask
2401
2415
  /// "backups of this database" — it stops being a thing the canister has to page around.
2402
- listBackups: (start: nat, limit: nat) -> (Result_46) query;
2416
+ listBackups: (start: nat, limit: nat) -> (Result_47) query;
2403
2417
  /// List all bearer tokens — Active, Revoked, and Expired. Owner uses this in
2404
2418
  /// the dashboard to show installed Connectors (claude.ai, Claude Desktop, etc.).
2405
2419
  /// Refusal reason preserved from the trap: `[]` reads as "no connector is installed on this
@@ -2409,7 +2423,7 @@ type Engram =
2409
2423
  /// `bearerTokenStore.list()` already resolves each token's status at read time (a token that
2410
2424
  /// merely stopped being used is reported `#Expired`, not a stale `#Active`), so the page carries
2411
2425
  /// the same honesty the store gained on 2026-08-17.
2412
- listBearerTokens: (start: nat, limit: nat) -> (Result_45) query;
2426
+ listBearerTokens: (start: nat, limit: nat) -> (Result_46) query;
2413
2427
  /// The condense checkpoints in the retained log at or above `startSeq`, oldest first.
2414
2428
  ///
2415
2429
  /// ⟨0.16.0, NEW⟩ The other half of the split above. A checkpoint is the only surviving record of a
@@ -2419,18 +2433,18 @@ type Engram =
2419
2433
  ///
2420
2434
  /// Owner-only like every other archive surface, and for the same structural reason: these rows
2421
2435
  /// carry the chain positions and roots of entries whose paths were inside the hash preimage.
2422
- listCondenseCheckpoints: (startSeq: nat, max: nat) -> (Result_44) query;
2436
+ listCondenseCheckpoints: (startSeq: nat, max: nat) -> (Result_45) query;
2423
2437
  /// ⟨0.16.0⟩ `metrics()` DELETED — absorbed by `about()`.
2424
2438
  ///
2425
2439
  /// Two public projections of one canister (L2.2): `metrics()` and `status()` both answered "what
2426
2440
  /// is this engram like" and disagreed on which counters they carried, so a consumer had to fetch
2427
2441
  /// both and know which one owned each field. Every field here survives on `about()`, day-flooring
2428
2442
  /// included.
2429
- listCycleSnapshots: (start: nat, limit: nat) -> (Result_43) query;
2443
+ listCycleSnapshots: (start: nat, limit: nat) -> (Result_44) query;
2430
2444
  /// Same `withheld` treatment as listMemoryFiles — the tombstone listing filtered reserved paths
2431
2445
  /// for non-owners just as silently, and a caller could not tell a filtered tombstone list from a
2432
2446
  /// complete one. Counted before slicing, so policy-hidden rows never blur into paging.
2433
- listDeletedMemoryFiles: (start: nat, limit: nat) -> (Result_42) query;
2447
+ listDeletedMemoryFiles: (start: nat, limit: nat) -> (Result_43) query;
2434
2448
  /// Stays on the engram under B1 (hybrid): withdrawal custody does not leave.
2435
2449
  ///
2436
2450
  /// NAMED item, not a `(Text, Int)` tuple. The Int is an activation time, and a bare Int beside a
@@ -2445,7 +2459,7 @@ type Engram =
2445
2459
  /// The item's field is `value`, not `address`: a list may hold a venue value that is no address.
2446
2460
  /// Readable by the owner, an active agent or an active guardian, as the old list was.
2447
2461
  listEip712Destinations: (typeId: blob, start: nat, limit: nat) ->
2448
- (Result_41) query;
2462
+ (Result_42) query;
2449
2463
  /// The registered shapes — E3: encodeTypeString is the display artifact, verbatim.
2450
2464
  /// Stays on the engram under B1 (hybrid): EIP-712 signing is custody, and custody does not leave.
2451
2465
  ///
@@ -2456,20 +2470,20 @@ type Engram =
2456
2470
  /// ⟨2026-10-14, the owner's ruling 3A⟩ Each row carries its per-field rules (`fieldRules`), joined in
2457
2471
  /// from `eip712FieldRules` — they are part of what the type authorises, so a reader of the list must
2458
2472
  /// not have to make a second call to learn them. The row type is `Eip712TypeView`.
2459
- listEip712Types: (start: nat, limit: nat) -> (Result_40) query;
2473
+ listEip712Types: (start: nat, limit: nat) -> (Result_41) query;
2460
2474
  /// ⟨2026-10-21, round 11 c⟩ Guardians' disputes, oldest first. Same visibility as
2461
2475
  /// `listRepudiations` and `listRecordNotes`: the owner and ACTIVE guardians read the rows; an
2462
2476
  /// agent gets an empty page whose `withheld` counts them (ruling 16 B holds — a dispute is the
2463
2477
  /// guardian's entry, not the agent's); a stranger, a pending guardian and the anonymous caller are
2464
2478
  /// refused.
2465
- listGuardianDisputes: (start: nat, limit: nat) -> (Result_39) query;
2479
+ listGuardianDisputes: (start: nat, limit: nat) -> (Result_40) query;
2466
2480
  /// Accessible by owner and guardians.
2467
2481
  ///
2468
2482
  /// Refusal reason carried over from the trap, because it is the sharpest example of why this
2469
2483
  /// surface may not fail soft: `[]` reads as "this engram has nobody who can freeze payments or
2470
2484
  /// pause writes" — a claim about who can STOP it. A caller who cannot tell that from "you may not
2471
2485
  /// see the roster" has been told the engram is unguarded when it may be fully guarded.
2472
- listGuardians: (start: nat, limit: nat) -> (Result_38) query;
2486
+ listGuardians: (start: nat, limit: nat) -> (Result_39) query;
2473
2487
  /// The export receipts in the retained log at or above `startSeq`, oldest first.
2474
2488
  ///
2475
2489
  /// ⟨0.16.0, L3⟩ ONE LIST, ONE QUESTION. This method used to return receipts AND checkpoints
@@ -2485,7 +2499,7 @@ type Engram =
2485
2499
  ///
2486
2500
  /// Read `MemoryRouter.ReceiptPage` before reading `page.total` as a receipt count. It is not one;
2487
2501
  /// it is the chain's length, and the declaration says why.
2488
- listMemoryExportReceipts: (startSeq: nat, max: nat) -> (Result_37) query;
2502
+ listMemoryExportReceipts: (startSeq: nat, max: nat) -> (Result_38) query;
2489
2503
  /// ⟨0.16.0⟩ THE `withheld` EXEMPLAR — L1 names this exact method as the defect it fixes.
2490
2504
  ///
2491
2505
  /// A non-owner's answer silently dropped every `config/` and `secrets/` row. Not "refused the
@@ -2510,7 +2524,7 @@ type Engram =
2510
2524
  /// the rows of THIS page (`MemoryRouter.info`), after the slice, so the cost is one lookup per
2511
2525
  /// row served, never one per file stored. A WIDENED REPLY: a reader that decodes the row by
2512
2526
  /// position rather than by field name breaks — none in this repository does.
2513
- listMemoryFiles: (start: nat, limit: nat) -> (Result_36) query;
2527
+ listMemoryFiles: (start: nat, limit: nat) -> (Result_37) query;
2514
2528
  /// One page of the memory log, seq-ordered, optionally narrowed to one author.
2515
2529
  ///
2516
2530
  /// THE WINDOW IS THE CURSOR, and the page now states it. The window is
@@ -2536,7 +2550,7 @@ type Engram =
2536
2550
  /// with the disclosures that make the page verifiable — the hidden-bound defect the census itself
2537
2551
  /// names on previewCondense's row.
2538
2552
  listMemoryLog: (startSeq: nat, max: nat, authorFilter: opt principal) ->
2539
- (Result_35) query;
2553
+ (Result_36) query;
2540
2554
  /// The caller's OWN spend-approval requests. ⟨0.16.0, L1 + L3 — fixed 2026-08-18⟩
2541
2555
  ///
2542
2556
  /// Two defects in seven lines, and the first is the one this release exists to remove:
@@ -2553,7 +2567,7 @@ type Engram =
2553
2567
  /// to see, so `total` over their own rows is the honest count and nothing is hidden FROM them.
2554
2568
  /// (The unbounded MAP is filed separately — pruning an approval record destroys evidence of what
2555
2569
  /// was asked, which is a retention ruling rather than a shape fix.)
2556
- listMyApprovalRequests: (start: nat, limit: nat) -> (Result_34) query;
2570
+ listMyApprovalRequests: (start: nat, limit: nat) -> (Result_35) query;
2557
2571
  /// The payer's own sessions, live ones first. PAYER-SCOPED: a caller sees only their own, which
2558
2572
  /// is why this needs no role — a session id is not a secret from the person who paid for it.
2559
2573
  ///
@@ -2562,7 +2576,7 @@ type Engram =
2562
2576
  /// It took no arguments, and a cursor added after the freeze is an argument-list change every
2563
2577
  /// client would break on — the market paged its own pending withdrawals before its cut for the
2564
2578
  /// same reason. The order is the order sessions were opened.
2565
- listMySessions: (start: nat, limit: nat) -> (Result_33) query;
2579
+ listMySessions: (start: nat, limit: nat) -> (Result_34) query;
2566
2580
  ///
2567
2581
  /// ⟨0.16.0, L3⟩ Paged and enveloped like every other `list*`, and the envelope here is uniformity
2568
2582
  /// rather than gating: this method cannot refuse anybody, so `#Err` is unreachable on it. That is
@@ -2575,7 +2589,7 @@ type Engram =
2575
2589
  /// asked by strangers. `verifyEngramActiveOwner` on the registry answers only about the owner
2576
2590
  /// IT recorded, so this chain is what a caller composes with when currency matters — which it
2577
2591
  /// cannot do if it needs a role here.
2578
- listOwnershipTransfers: (start: nat, limit: nat) -> (Result_32) query;
2592
+ listOwnershipTransfers: (start: nat, limit: nat) -> (Result_33) query;
2579
2593
  /// ⟨2026-09-29, the platform's question from the build review⟩ OWNER-ONLY: how many payment
2580
2594
  /// signatures each agent has obtained today, and the daily limit (200, `PaymentSignCap`). The
2581
2595
  /// owner's console stated the rule and showed no number, because nothing served one; a number it
@@ -2591,7 +2605,7 @@ type Engram =
2591
2605
  /// marketplace's one shared count today is in the reply's `marketplace` field, with the limit this
2592
2606
  /// engram enforces for it — beside the agents, never a row among them
2593
2607
  /// (`PaymentSignCap.marketplaceRow`). Null when no marketplace is set.
2594
- listPaymentSignatureCounts: (start: nat, limit: nat) -> (Result_31) query;
2608
+ listPaymentSignatureCounts: (start: nat, limit: nat) -> (Result_32) query;
2595
2609
  /// Agent records removed by a reset. Each row is a NAMED record with the fields `principal`,
2596
2610
  /// `name`, `registeredAt` and `purgedAt` — read them BY NAME, never by position.
2597
2611
  /// ⟨2026-09-29, the vocabulary ruling: pairing is the one verb that admits an agent⟩ The field
@@ -2631,7 +2645,7 @@ type Engram =
2631
2645
  /// `invite` its enrolment named, and `ended` — why and on what day its engagement ended (its own
2632
2646
  /// earlier ending, or the reset) — the facts `resyncAgentEdges` re-sends. The stored rows are
2633
2647
  /// served as they are.
2634
- listPurgedAgents: (start: nat, limit: nat) -> (Result_30) query;
2648
+ listPurgedAgents: (start: nat, limit: nat) -> (Result_31) query;
2635
2649
  /// ⟨0.16.0⟩ ONE ACCESSOR, folding `readReadLog` and `getDenialLog` — and the fold only became
2636
2650
  /// safe because of a change made earlier in this same leg.
2637
2651
  ///
@@ -2693,13 +2707,13 @@ type Engram =
2693
2707
  /// on the chained record — the same `RecordView` filter, and `withheld` counts what it removed
2694
2708
  /// together with what `successFilter` removed. WHAT WOULD MAKE THIS WRONG: see `listAuditEntries`.
2695
2709
  listReadLog: (successFilter: opt bool, start: nat, limit: nat) ->
2696
- (Result_29) query;
2710
+ (Result_30) query;
2697
2711
  /// ⟨2026-10-21, round 11 b⟩ The owner's notes, oldest first. Same visibility as
2698
2712
  /// `listRepudiations`, for the same reason: the owner and ACTIVE guardians read the rows; an agent
2699
2713
  /// reads only the entries it caused (follow-up 16 B), and every note is the owner's, so an agent
2700
2714
  /// gets an empty page whose `withheld` counts the notes in its window — never "there are none". A
2701
2715
  /// stranger, a pending guardian and the anonymous caller are refused.
2702
- listRecordNotes: (start: nat, limit: nat) -> (Result_28) query;
2716
+ listRecordNotes: (start: nat, limit: nat) -> (Result_29) query;
2703
2717
  /// Same visibility as listAuditEntries: the owner, this engram's agents, and ACTIVE guardians
2704
2718
  /// see disputes. An unauthorized read REFUSES — it does not return an empty list, because an
2705
2719
  /// empty list reads as "no disputes have been filed", which is a claim, not an absence of one.
@@ -2714,7 +2728,7 @@ type Engram =
2714
2728
  /// window — which says disputes exist without showing them, never "none have been filed". WHAT
2715
2729
  /// WOULD MAKE THIS WRONG: a ruling that an agent may see the disputes of its own writes; this would
2716
2730
  /// then have to look up each disputed version's writer, which it does not do today.
2717
- listRepudiations: (start: nat, limit: nat) -> (Result_27) query;
2731
+ listRepudiations: (start: nat, limit: nat) -> (Result_28) query;
2718
2732
  /// ⟨2026-10-21, the owner's round-11 answer f⟩ OWNER-ONLY: the sign-ins, each with the name its app
2719
2733
  /// registered. The same tokens, in the same order and paged the same way, as `listBearerTokens`,
2720
2734
  /// each beside `clientName` — the RFC 7591 `client_name` the app registered when the token was
@@ -2723,7 +2737,7 @@ type Engram =
2723
2737
  /// apps apart. A NEW method rather than a field on `BearerToken`: that record is stored (M0170)
2724
2738
  /// and `listBearerTokens`' reply is shipped (never widened). An agent, a guardian, a stranger and
2725
2739
  /// the anonymous caller are refused, by `listBearerTokens`' own gate and for its reason.
2726
- listSignIns: (start: nat, limit: nat) -> (Result_26) query;
2740
+ listSignIns: (start: nat, limit: nat) -> (Result_27) query;
2727
2741
  /// Owner: advance the review cursor — "I have seen everything up to and including uptoAuditId"
2728
2742
  /// (null = everything at the current head). Bounded so the attestation can never cover entries
2729
2743
  /// the console did not render; clamped monotonic (the cursor never moves backward) and to the
@@ -2733,7 +2747,7 @@ type Engram =
2733
2747
  /// (every family qualifiesForReview admits is written to auditLogger, so they share that space),
2734
2748
  /// and this never inspects an operation or a role. Widening what the review shows therefore
2735
2749
  /// changes only which ids the console can pass here — it cannot desynchronise the cursor.
2736
- markAgentWritesReviewed: (uptoAuditId: opt nat) -> (Result_13);
2750
+ markAgentWritesReviewed: (uptoAuditId: opt nat) -> (Result_14);
2737
2751
  /// ⟨2026-10-21, the owner's round-11 answer g⟩ AN AGENT READS ITS OWN GRANT — to the calling key
2738
2752
  /// only (`People.AgentGrant`): what it may read, where it may write, its rate, and the payment
2739
2753
  /// limits enforced against that key. It reveals nothing a refusal does not already say, and lets
@@ -2744,13 +2758,13 @@ type Engram =
2744
2758
  /// owner by name (`People.OWNER_HAS_NO_GRANT`), a revoked or resigned agent ("Agent is revoked" /
2745
2759
  /// "Agent has resigned" — an ended agent may do nothing, and its old grant would read as powers),
2746
2760
  /// a guardian and a stranger ("Not authorized"), the anonymous caller. A query: it writes nothing.
2747
- myGrant: () -> (Result_25) query;
2761
+ myGrant: () -> (Result_26) query;
2748
2762
  /// The AGENT's current key nominates the key that will replace it. Nothing moves yet: the new
2749
2763
  /// key must accept, by its own call, within 24 hours (`acceptAgentKeyNomination`). One pending
2750
2764
  /// nomination per agent — a new one replaces the earlier one, and the record says which. Refused,
2751
2765
  /// with nothing changed, for a caller that is not an active agent here and for a key that could
2752
2766
  /// not hold the record (`KeyReplacement.nomineeRefusal`).
2753
- nominateAgentKey: (newKey: principal) -> (Result_1);
2767
+ nominateAgentKey: (newKey: principal) -> (Result_2);
2754
2768
  /// An AGENT paired here asks this engram to open an engram of its own. This engram attaches 1.3 T of
2755
2769
  /// its own cycles to the registry's `sysSpawnChild`; the agent's lasting key owns what is opened, and
2756
2770
  /// the engram is recorded as opened through this one. Answers the new engram's canister id.
@@ -2779,15 +2793,15 @@ type Engram =
2779
2793
  ///
2780
2794
  /// WHAT WOULD MAKE THIS WRONG: an await added between `ChildAllowance.take` and the registry call; the
2781
2795
  /// registry's `CHILD_MIN_ATTACHED_CYCLES` moving without `CHILD_ATTACH_CYCLES`.
2782
- openChildEngram: () -> (Result_24);
2783
- openSession: (config: SessionConfig, sig: PaymentSignature) -> (Result_23);
2796
+ openChildEngram: () -> (Result_25);
2797
+ openSession: (config: SessionConfig, sig: PaymentSignature) -> (Result_24);
2784
2798
  /// Withdraw tokens to the owner's principal. This is the ONLY way to
2785
2799
  /// move tokens out of the engram to an external address, and the
2786
2800
  /// destination is always hardcoded to the owner.
2787
2801
  /// NOT freeze-gated: the owner always controls their own funds.
2788
2802
  /// Guardian freeze only blocks agent/public operations.
2789
2803
  ownerWithdraw: (amount: TokenAmount, ownerAuth: opt ActionAuth) ->
2790
- (Result_13);
2804
+ (Result_14);
2791
2805
  /// ⟨0.16.0⟩ `payRentFromEarnings` DELETED — ruled TWICE (B1 and B2), and it was the single
2792
2806
  /// clearest violation of the OSS/platform split in this repo.
2793
2807
  ///
@@ -2845,13 +2859,13 @@ type Engram =
2845
2859
  pairAgent: (arg: record {
2846
2860
  code: text;
2847
2861
  enrolment: Enrolment;
2848
- }) -> (Result_22);
2862
+ }) -> (Result_23);
2849
2863
  /// ⟨0.16.0, L2.2 — renamed from `guardianPauseWrites`⟩ Same correction as freezePayments above:
2850
2864
  /// owner-or-guardian, and `resumeWrites` never carried the prefix either.
2851
- pauseWrites: () -> (Result_1);
2865
+ pauseWrites: () -> (Result_2);
2852
2866
  /// ⟨2026-10-21, the owner's round-11 answer d⟩ `pauseWrites` with a reason; everything said of
2853
2867
  /// `freezePaymentsWithReason` holds, with `canPauseWrites` as the guardian's grant.
2854
- pauseWritesWithReason: (reason: text) -> (Result_1);
2868
+ pauseWritesWithReason: (reason: text) -> (Result_2);
2855
2869
  /// What condensing through `toSeq` would do, and whether it is unlocked. COMMITS NOTHING — it is
2856
2870
  /// a query, so it structurally cannot; a preview that wrote would be its own trap.
2857
2871
  ///
@@ -2870,7 +2884,7 @@ type Engram =
2870
2884
  ///
2871
2885
  /// `unlocked` is the export-receipt gate ONLY. It is not a promise the condense will land: the
2872
2886
  /// history-budget delta is checked at commit time and can still refuse a short prefix.
2873
- previewCondense: (toSeq: nat) -> (Result_21) query;
2887
+ previewCondense: (toSeq: nat) -> (Result_22) query;
2874
2888
  /// A quote for a session this caller has not opened and is not committed to — the intent a
2875
2889
  /// buyer signs against. Pure dry run, no state, no funds.
2876
2890
  ///
@@ -2918,7 +2932,7 @@ type Engram =
2918
2932
  previewRetention: (entries: vec record {
2919
2933
  text;
2920
2934
  RetentionClassSpec;
2921
- }) -> (Result_20) query;
2935
+ }) -> (Result_21) query;
2922
2936
  /// Read one memory file at its current version.
2923
2937
  ///
2924
2938
  /// Gated on the `read_memory` permission, so an agent holding that grant reaches it — unlike
@@ -2933,7 +2947,7 @@ type Engram =
2933
2947
  /// counter here could never persist; read counting lives on the update path
2934
2948
  /// (`sessionReadContext` and the MCP reads). A caller measuring engram usage from this method
2935
2949
  /// will measure nothing.
2936
- readMemory: (path: text) -> (Result_11) query;
2950
+ readMemory: (path: text) -> (Result_12) query;
2937
2951
  /// Read many paths in one call. Per-path Results are KEPT — partial success is the point, and
2938
2952
  /// one unreadable path must not fail the other nine.
2939
2953
  ///
@@ -2949,7 +2963,7 @@ type Engram =
2949
2963
  /// Both are now what they are: a single `#Err` for the whole call. `#Ok` still carries a row per
2950
2964
  /// path, each with its own Result — a refused RESERVED path sits beside a readable one, which is
2951
2965
  /// a genuine per-path fact.
2952
- readMemoryBatch: (paths: vec text) -> (Result_19) query;
2966
+ readMemoryBatch: (paths: vec text) -> (Result_20) query;
2953
2967
  /// ⟨0.16.0⟩ `getMemoryRetentionGuards` DELETED — folded into `getMemoryRetentionPolicy` above.
2954
2968
  /// It was the second L2.1 array-returning `get*`, and separating it from the policy it modifies
2955
2969
  /// was the defect described there. Its own docs are preserved at the fold site.
@@ -2960,7 +2974,7 @@ type Engram =
2960
2974
  /// see it cannot know whether it has the whole range, which is how silent truncation gets
2961
2975
  /// reintroduced. Loop while `more` is true, advancing by the bytes actually returned.
2962
2976
  readMemoryBytes: (path: text, offset: nat, len: nat, version: opt nat) ->
2963
- (Result_18) query;
2977
+ (Result_19) query;
2964
2978
  /// The escrow exit for a session whose settle cannot pay.
2965
2979
  ///
2966
2980
  /// PAYER-ONLY, enforced inside the gateway, and deliberately not owner-triggered: the payer's own
@@ -3023,7 +3037,7 @@ type Engram =
3023
3037
  /// was the block index alone, which read as the amount. If the session's record is removed before
3024
3038
  /// the amount can be read back — a session closed in the same moment as the recovery and cleaned up
3025
3039
  /// during its transfer — it answers `#Other` naming the block, never a guessed amount.
3026
- recoverEscrow: (sessionId: text, amountE6: nat) -> (Result_17);
3040
+ recoverEscrow: (sessionId: text, amountE6: nat) -> (Result_18);
3027
3041
  /// ⟨0.16.0, L1⟩ A REDEMPTION PATH, where the arm choice is a disclosure decision.
3028
3042
  ///
3029
3043
  /// Four of these refusals are about the CODE and one is about the caller. The code arms restate
@@ -3037,16 +3051,16 @@ type Engram =
3037
3051
  /// rather than `()`. The new guardian learns, in the same reply, the name and permissions the
3038
3052
  /// owner's invite gave them and that they cannot act until approved; before, that took a second
3039
3053
  /// read they had no reason to know to make.
3040
- registerGuardian: (code: text) -> (Result_16);
3054
+ registerGuardian: (code: text) -> (Result_17);
3041
3055
  /// Remove a per-caller override so that caller reverts to — and keeps TRACKING — the global caps.
3042
3056
  ///
3043
3057
  /// It travels with its pair and is never dropped alone: without it the only way "back" from an
3044
3058
  /// override is to overwrite it with a frozen copy of the global policy, which then stops
3045
3059
  /// following later changes. That makes every override permanent in effect.
3046
- removeCallerSpendPolicy: (caller: principal) -> (Result_1);
3060
+ removeCallerSpendPolicy: (caller: principal) -> (Result_2);
3047
3061
  /// ⟨2026-10-14, 4A⟩ Remove a destination from one action's list. Instant, and NOT freeze-gated:
3048
3062
  /// removal TIGHTENS, and a frozen engram must still be able to shrink what it could sign to.
3049
- removeEip712Destination: (typeId: blob, value: text) -> (Result_1);
3063
+ removeEip712Destination: (typeId: blob, value: text) -> (Result_2);
3050
3064
  /// De-register a type that has NEVER SIGNED. Exists because of a hazard the first external
3051
3065
  /// validation found within hours (consumer report, 2026-08-06): a bare-name #standard registration —
3052
3066
  /// cheap, no watcher preconditions — permanently blocked the guarded namespaced registration
@@ -3058,7 +3072,7 @@ type Engram =
3058
3072
  /// frozen engram must still be able to shrink what it could sign.
3059
3073
  /// ⟨2026-10-14⟩ `removeEvmWithdrawDestination` is now `removeEip712Destination` (ruling 4A); same
3060
3074
  /// reasoning. Removing a type now also drops its rules and its own destination list.
3061
- removeEip712Type: (typeId: blob) -> (Result_1);
3075
+ removeEip712Type: (typeId: blob) -> (Result_2);
3062
3076
  /// Owner-only: remove a guardian from the roster.
3063
3077
  ///
3064
3078
  /// Unlike revoking an agent this is NOT terminal for the principal — the guardian roster does
@@ -3067,7 +3081,7 @@ type Engram =
3067
3081
  ///
3068
3082
  /// `#NotFound` rather than `#Refused` when there is no such guardian: only the owner reaches this
3069
3083
  /// line, so the roster is theirs and its contents are not a secret being withheld from them.
3070
- removeGuardian: (guardianPrincipal: principal) -> (Result_1);
3084
+ removeGuardian: (guardianPrincipal: principal) -> (Result_2);
3071
3085
  /// ⟨2026-10-21, the owner's round-11 answer a⟩ OWNER-ONLY: give an agent a new name. A name was
3072
3086
  /// fixed at the invite, and two agents both called "agent" is how the 2026-10-20 session started.
3073
3087
  /// Only the VALUE of the stored `AgentRecord.name` changes — no new state, no reshaped record —
@@ -3078,12 +3092,12 @@ type Engram =
3078
3092
  /// line break is `#Invalid` (`People.nameRefusal`); an unknown key is `#NotFound`; the agent's
3079
3093
  /// current name is `#Conflict`. Nothing changes on any refusal. Not alerted: the owner is the one
3080
3094
  /// renaming (`ActionAlerts.classify` answers null for `agent.rename`).
3081
- renameAgent: (agentPrincipal: principal, name: text) -> (Result_1);
3095
+ renameAgent: (agentPrincipal: principal, name: text) -> (Result_2);
3082
3096
  /// Owner disavows a specific memory write, in the open. Marks — never deletes: the content and
3083
3097
  /// the original audit entry stay exactly where they were; this appends a chained
3084
3098
  /// `memory.repudiate` entry and lists the (path, version) so readers can see the dispute.
3085
3099
  repudiateMemoryWrite: (path: text, version: nat, reason: text) ->
3086
- (Result_13);
3100
+ (Result_14);
3087
3101
  /// ⚠ OWNER-ONLY BULK RESET. Destructive, and wider than its name suggests.
3088
3102
  ///
3089
3103
  /// It severs EVERY grant surface that can outlive a role — agents, guardians, invites and
@@ -3111,7 +3125,7 @@ type Engram =
3111
3125
  /// NOT unbounded. It caps at MAX_ENTRIES and trims its oldest tenth on overflow, so on any engram
3112
3126
  /// long-lived enough for the rent model to apply, the reset entry is not guaranteed to still be
3113
3127
  /// there. `agentPurgeLog` is the evidence that does not age out — which is why it exists.
3114
- resetEngram: () -> (Result_15);
3128
+ resetEngram: () -> (Result_16);
3115
3129
  /// ⟨2026-09-28, owner decision: an agent can resign from an engram, and the resignation is
3116
3130
  /// recorded⟩ The AGENT ends its own engagement with this engram.
3117
3131
  ///
@@ -3130,11 +3144,11 @@ type Engram =
3130
3144
  /// The roster change and its chained audit line commit BEFORE the registry is told, so a registry
3131
3145
  /// that is down cannot leave the agent half-resigned; a missed notice is logged by
3132
3146
  /// `notifyRegistryAgentEdge`. WHAT WOULD MAKE THIS WRONG: a second path that sets `#Resigned`.
3133
- resignAgent: () -> (Result_1);
3147
+ resignAgent: () -> (Result_2);
3134
3148
  /// OWNER-ONLY release of the write pause, with the same one-way shape as `unfreezePayments`: a
3135
3149
  /// guardian holding `canPauseWrites` can stop writes without the owner and cannot restart them,
3136
3150
  /// and the owner can always restart them. A tripwire rather than a lock.
3137
- resumeWrites: () -> (Result_1);
3151
+ resumeWrites: () -> (Result_2);
3138
3152
  /// Self-heal: re-send every ACTIVE agent's start to the spawning registry (idempotent — the
3139
3153
  /// registry mints no duplicate for an open engagement), for when a notice was missed. Owner-only.
3140
3154
  /// Returns how many the registry ACKNOWLEDGED. ⟨2026-09-28: it used to count sends that did not
@@ -3157,11 +3171,11 @@ type Engram =
3157
3171
  /// all that is left to send is the ending, and the registry has nothing to end. The report lists
3158
3172
  /// each such engagement under `cannotBeRecorded` (key, root, invite, and how and when it ended),
3159
3173
  /// apart from `notRecorded`, so the owner sees them rather than silence.
3160
- resyncAgentEdges: () -> (Result_14);
3174
+ resyncAgentEdges: () -> (Result_15);
3161
3175
  /// Return to managed custody: the engram adds the registry back as a controller ALONGSIDE the
3162
3176
  /// owner — it does not remove the owner. The inverse of `claimSovereignty`, and the reason
3163
3177
  /// sovereignty is not a one-way door.
3164
- returnToManaged: () -> (Result_1);
3178
+ returnToManaged: () -> (Result_2);
3165
3179
  /// Replace the whole content of an EXISTING file.
3166
3180
  ///
3167
3181
  /// This is the one thing agents could never do before: every agent write was an append,
@@ -3194,7 +3208,7 @@ type Engram =
3194
3208
  /// human means a different wallet.
3195
3209
  ///
3196
3210
  /// To narrow what an agent may do rather than end its access, use `setAgentPermissions`.
3197
- revokeAgent: (agentPrincipal: principal) -> (Result_1);
3211
+ revokeAgent: (agentPrincipal: principal) -> (Result_2);
3198
3212
  /// Owner-only panic button: revoke EVERY active agent at once. Returns how many were revoked.
3199
3213
  ///
3200
3214
  /// ⚠ IT REVOKES ONLY AGENTS. Invites and connector bearer tokens are separate surfaces with
@@ -3211,7 +3225,7 @@ type Engram =
3211
3225
  /// written, and only then does it await one notification per revoked agent. So a notification
3212
3226
  /// that fails leaves the agents revoked here regardless — a partial notify is not a partial
3213
3227
  /// revocation, which is the direction that matters for a panic button.
3214
- revokeAllAgents: () -> (Result_13);
3228
+ revokeAllAgents: () -> (Result_14);
3215
3229
  /// Owner-only panic button: revoke every connector bearer token at once. Returns how many.
3216
3230
  ///
3217
3231
  /// The THIRD independent surface — hosted connectors authenticate with bearer tokens, not with
@@ -3220,7 +3234,7 @@ type Engram =
3220
3234
  /// holding a live session.
3221
3235
  ///
3222
3236
  /// Tokens are re-issuable: revoking them is not permanent the way revoking an agent is.
3223
- revokeAllBearerTokens: () -> (Result_13);
3237
+ revokeAllBearerTokens: () -> (Result_14);
3224
3238
  /// ⟨0.16.0⟩ `removeAllGuardians` DELETED — test-only (L6), and verified NOT part of KILL-SWITCH's
3225
3239
  /// mass-revoke set. The destructive phase-07 suite iterates `removeGuardian` instead, so nothing
3226
3240
  /// loses a capability: what dies is a bulk spelling no runbook ever invoked.
@@ -3232,10 +3246,10 @@ type Engram =
3232
3246
  ///
3233
3247
  /// Unlike revoking an agent, this costs nothing permanently — an invite is a one-time code,
3234
3248
  /// so voiding it and minting a fresh one is the ordinary path.
3235
- revokeAllInvites: () -> (Result_13);
3249
+ revokeAllInvites: () -> (Result_14);
3236
3250
  /// Revoke a bearer token by its public tokenId. Idempotent.
3237
3251
  /// Subsequent /mcp requests using this token will be rejected.
3238
- revokeBearerToken: (tokenId: text) -> (Result_1);
3252
+ revokeBearerToken: (tokenId: text) -> (Result_2);
3239
3253
  /// ⟨0.16.0, census §10 item 16⟩ RETURNS A REAL RECEIPT, not `R<()>` — same reason as the delete
3240
3254
  /// above, and sharper here: a rollback WRITES A NEW VERSION, so the caller's next question is
3241
3255
  /// always "which version am I on now". `r.version` was already read for the audit line.
@@ -3258,7 +3272,7 @@ type Engram =
3258
3272
  /// `#Conflict` rather than `#Refused` for a `#Revoked` or `#Resigned` record: the caller IS the
3259
3273
  /// agent on that record, so its standing is not the problem — the record's state is. An
3260
3274
  /// agent reading `#Refused` would go looking for a permission that was never missing.
3261
- rotateAgentKeyHash: (newPublicKeyHash: text) -> (Result_1);
3275
+ rotateAgentKeyHash: (newPublicKeyHash: text) -> (Result_2);
3262
3276
  /// Append to a memory file against a PAID x402 session voucher — the write half of the paid rail,
3263
3277
  /// authorized by the voucher rather than by a role.
3264
3278
  /// ⟨2026-09-30, ic402 2.17.0⟩ Authorized by the payer's own call with the voucher: only the
@@ -3302,7 +3316,7 @@ type Engram =
3302
3316
  /// ⚠ RAW STORED BYTES, like `readMemoryBatch`. On a Private (encrypted) engram the content is
3303
3317
  /// CIPHERTEXT; the key-holding SDK decrypts it. A caller without the key gets bytes it cannot
3304
3318
  /// read, not an error.
3305
- sessionReadContext: (clientLabel: text) -> (Result_12);
3319
+ sessionReadContext: (clientLabel: text) -> (Result_13);
3306
3320
  /// Read one memory file against a PAID x402 session voucher. No role, no invite — the voucher is
3307
3321
  /// the authorization, which is what makes this the engram's one rail a stranger can pay to use.
3308
3322
  ///
@@ -3332,14 +3346,14 @@ type Engram =
3332
3346
  /// session must not be the side door: without this guard a stranger holding a fraction-of-a-
3333
3347
  /// cent voucher could read `secrets/*`.
3334
3348
  /// · Payments are frozen on this engram.
3335
- sessionReadMemory: (voucher: Voucher, path: text) -> (Result_11);
3349
+ sessionReadMemory: (voucher: Voucher, path: text) -> (Result_12);
3336
3350
  /// Configure action alerts: an https webhook that receives new chained-audit entries matching the
3337
3351
  /// enabled event classes (money / approvals / guardian / agentWrites), batched, at most one
3338
3352
  /// POST per minute. Owner-only. Payloads carry audit METADATA (operation, caller, role, bounded
3339
3353
  /// details) — never memory file contents. Setting a URL (re)arms delivery FROM NOW: the cursor
3340
3354
  /// jumps to the current end of the log so history is not replayed. Passing url = null disables.
3341
3355
  /// The URL itself is never written to the audit log (webhook URLs often embed secret tokens).
3342
- setActionAlertConfig: (cfg: AlertConfig) -> (Result_1);
3356
+ setActionAlertConfig: (cfg: AlertConfig) -> (Result_2);
3343
3357
  /// Owner-only: replace an existing agent's permission set. The way to NARROW what an agent
3344
3358
  /// may do without ending their access — `revokeAgent` is terminal for that principal, this is
3345
3359
  /// not.
@@ -3355,7 +3369,7 @@ type Engram =
3355
3369
  /// forward is to grant read to your own agents instead, or to switch to Connected mode first —
3356
3370
  /// both of which the message says.
3357
3371
  setAgentPermissions: (agentPrincipal: principal, permissions:
3358
- AgentPermissions) -> (Result_1);
3372
+ AgentPermissions) -> (Result_2);
3359
3373
  /// Paths an agent holding a grant may REVISE rather than only append to.
3360
3374
  ///
3361
3375
  /// Matching is EXACT, except that an entry ending in "/" grants everything beneath it. A grant
@@ -3363,7 +3377,7 @@ type Engram =
3363
3377
  /// real use case is rotating dated files under a prefix, and per-file grants would be unusable
3364
3378
  /// for that. What a bare prefix would do — "MEMORY.md" also matching "MEMORY.md.bak" — is the
3365
3379
  /// kind of accident a permission surface must not have.
3366
- setAgentRevisablePaths: (paths: vec text) -> (Result_1);
3380
+ setAgentRevisablePaths: (paths: vec text) -> (Result_2);
3367
3381
  /// ⟨0.16.0 — census row⟩ Returns the APPLIED config, which is how this closes the
3368
3382
  /// setter-without-a-getter gap without adding a method: the write is the read.
3369
3383
  ///
@@ -3378,10 +3392,10 @@ type Engram =
3378
3392
  /// own, and this setter applies the number to every creator's set, so `prunedBackups` counts
3379
3393
  /// across all of them. "The write is the read" above went stale for a second phone, which never
3380
3394
  /// made the write: `getBackupRetention` is the read.
3381
- setBackupRetention: (dbType: text, maxBackups: nat) -> (Result_10);
3395
+ setBackupRetention: (dbType: text, maxBackups: nat) -> (Result_11);
3382
3396
  /// Override the caps for ONE caller — an agent this owner trusts more, or less, than the rest.
3383
3397
  setCallerSpendPolicy: (caller: principal, policy: SpendingPolicy) ->
3384
- (Result_1);
3398
+ (Result_2);
3385
3399
  /// Owner-only: set how many engrams `agentPrincipal`'s agent may open of its own through this
3386
3400
  /// engram. Kept by the agent's lasting key, so it carries over a key replacement. Any count is
3387
3401
  /// accepted; the registry lets a lasting key open one engram through a parent, ever, so 1 or more
@@ -3392,7 +3406,7 @@ type Engram =
3392
3406
  /// back. The change is written to the record under `agent.childAllowance.set`, which is in the
3393
3407
  /// alerts' money class (`ActionAlerts.classify`), so an owner or guardian with an alert channel
3394
3408
  /// hears of it.
3395
- setChildAllowance: (agentPrincipal: principal, allowed: nat) -> (Result_1);
3409
+ setChildAllowance: (agentPrincipal: principal, allowed: nat) -> (Result_2);
3396
3410
  /// ⟨0.16.0⟩ `getEncryptedMemoryKeyForEpoch` DELETED — folded into `getEncryptedMemoryKey`'s epoch
3397
3411
  /// argument — see that method for the fold and the `null`-means-CURRENT rule.
3398
3412
  /// Owner-only: turn client-side memory encryption (Private mode) on or off for FUTURE writes.
@@ -3415,7 +3429,7 @@ type Engram =
3415
3429
  ///
3416
3430
  /// Private mode also closes the paid read rail by construction: a paid session holds no key, so
3417
3431
  /// `sessionReadMemory` refuses on an encrypted engram whatever `setPaidMemoryReadEnabled` says.
3418
- setEncryptionEnabled: (enabled: bool) -> (Result_1);
3432
+ setEncryptionEnabled: (enabled: bool) -> (Result_2);
3419
3433
  /// Register the owner's EVM address for withdrawals.
3420
3434
  ///
3421
3435
  /// First set: immediate — no guardian needed.
@@ -3426,12 +3440,12 @@ type Engram =
3426
3440
  ///
3427
3441
  /// The guardian doesn't approve the change — the owner is sovereign.
3428
3442
  /// The guardian's existence is the gate, not their active consent.
3429
- setEvmOwnerAddress: (evmAddress: text) -> (Result_1);
3443
+ setEvmOwnerAddress: (evmAddress: text) -> (Result_2);
3430
3444
  /// A guardian arms their OWN webhook over the guarded engram's audit stream (same event
3431
3445
  /// classes and payload as the owner channel — audit metadata, never memory file contents;
3432
3446
  /// the guardian honesty rail: integrity, not content). Active guardians only. Arming starts
3433
3447
  /// from NOW (no history replay); url = null disarms and frees the slot.
3434
- setGuardianAlertConfig: (cfg: AlertConfig) -> (Result_1);
3448
+ setGuardianAlertConfig: (cfg: AlertConfig) -> (Result_2);
3435
3449
  /// Per-prefix retention policy. The longest rule that covers a path wins; anything uncovered
3436
3450
  /// keeps everything.
3437
3451
  ///
@@ -3449,7 +3463,7 @@ type Engram =
3449
3463
  vec record {
3450
3464
  text;
3451
3465
  RetentionClassSpec;
3452
- }) -> (Result_1);
3466
+ }) -> (Result_2);
3453
3467
  /// Owner-only: open or close the monetized read rail. When disabled (the default), sessionReadMemory
3454
3468
  /// fails closed for every voucher-bearer — selling the owner's memory is opt-in, not the default.
3455
3469
  ///
@@ -3460,26 +3474,26 @@ type Engram =
3460
3474
  ///
3461
3475
  /// `getEngramCard`'s `x402Support` reports THIS flag, so a buyer can read the rail's state before
3462
3476
  /// paying rather than discovering it in a refusal.
3463
- setPaidMemoryReadEnabled: (enabled: bool) -> (Result_1);
3477
+ setPaidMemoryReadEnabled: (enabled: bool) -> (Result_2);
3464
3478
  /// Open or close the paid-memory WRITE rail (RB4). Owner-only, like its read twin.
3465
3479
  ///
3466
3480
  /// Kept as a SEPARATE flag rather than widening `setPaidMemoryReadEnabled` into one switch: an
3467
3481
  /// owner selling read access has not thereby agreed to sell write access, and a single flag makes
3468
3482
  /// the larger permission ride in on the smaller one. Two flags is the shape that lets an owner
3469
3483
  /// say yes to one and no to the other, which is the common case.
3470
- setPaidMemoryWriteEnabled: (enabled: bool) -> (Result_1);
3484
+ setPaidMemoryWriteEnabled: (enabled: bool) -> (Result_2);
3471
3485
  /// ⟨0.16.0, L1⟩ Every validation refusal here is `#Invalid` and the cap is `#Conflict`, and the
3472
3486
  /// split is worth stating once for the whole whole-value-config family below: a malformed path is
3473
3487
  /// the CALLER'S to fix and retrying with a corrected list works, while "max 20" is a property of
3474
3488
  /// this engram that no argument gets around. A caller that cannot tell those apart either edits
3475
3489
  /// forever or gives up on a request that was one character from valid.
3476
- setProtectedPaths: (paths: vec text) -> (Result_1);
3490
+ setProtectedPaths: (paths: vec text) -> (Result_2);
3477
3491
  /// OWNER-ONLY: switch the metrics reader's read of the seat weeks off (`false`) or back on (`true`).
3478
3492
  /// On from birth, by the owner's ruling of 2026-10-02. Off, `sysGetAgentSeatWeeks` refuses the
3479
3493
  /// reader by name, naming this switch; the rows are still kept and the owner still reads them. Each
3480
3494
  /// call is a chained record entry (`metrics.setSeatWeeksReadEnabled`, the new and the old value), so
3481
3495
  /// when the read was on or off is part of the record. Anyone else is refused by name.
3482
- setSeatWeeksReadEnabled: (enabled: bool) -> (Result_1);
3496
+ setSeatWeeksReadEnabled: (enabled: bool) -> (Result_2);
3483
3497
  /// Set the most this engram may spend per day ACROSS EVERY CALLER — five agents, the owner and the
3484
3498
  /// marketplace together. `null` removes the ceiling. ⟨2026-09-28⟩
3485
3499
  /// ⟨CORRECTED 2026-09-29, review finding X-8: "spend" was too wide. The ceiling covers the x402
@@ -3521,7 +3535,7 @@ type Engram =
3521
3535
  /// The record entry `spend.setCeiling` carries the new AND the previous value, so a widening is
3522
3536
  /// distinguishable from a tightening afterwards — the reason `spend.setPolicy` records its limits.
3523
3537
  /// Not blocked by a payments freeze, like `setSpendPolicy`: setting a limit moves no money.
3524
- setSpendCeiling: (maxPerDay: opt nat) -> (Result_1);
3538
+ setSpendCeiling: (maxPerDay: opt nat) -> (Result_2);
3525
3539
  /// Set this engram's spending caps.
3526
3540
  ///
3527
3541
  /// The audit row records the LIMITS, not merely that a change happened, so a WIDENING is
@@ -3531,7 +3545,7 @@ type Engram =
3531
3545
  /// Raising a cap RESOLVES pending approval requests it now covers — that is the second half of
3532
3546
  /// the escalation an agent starts when it hits a limit, and without it the queue is a place
3533
3547
  /// requests go to expire.
3534
- setSpendPolicy: (policy: SpendingPolicy) -> (Result_1);
3548
+ setSpendPolicy: (policy: SpendingPolicy) -> (Result_2);
3535
3549
  /// Owner-only: set YOUR OWN safety rails on the funding path — a per-top-up ckUSDC ceiling and a
3536
3550
  /// minimum gap between top-ups. Read them back with `getTopUpLimits`.
3537
3551
  ///
@@ -3555,12 +3569,12 @@ type Engram =
3555
3569
  record {
3556
3570
  cooldownSeconds: nat;
3557
3571
  maxCkusdcE6s: nat;
3558
- }) -> (Result_1);
3572
+ }) -> (Result_2);
3559
3573
  /// Owner sets the World ID app_id + action + rp_id from their World Developer Portal (rp_id appears
3560
3574
  /// after "Enable World ID 4.0" on a production app). The action MUST be configured there with
3561
3575
  /// max_verifications = Unlimited (idempotent /verify → survives IC consensus). After setting this,
3562
3576
  /// register getWorldIdRpSignerAddress() as the rp_id's signer address in the Portal.
3563
- setWorldIdConfig: (appId: text, action: text, rpId: text) -> (Result_1);
3577
+ setWorldIdConfig: (appId: text, action: text, rpId: text) -> (Result_2);
3564
3578
  /// Submit a verified-human proof: the IDKitResult from the frontend's World ID flow, forwarded
3565
3579
  /// VERBATIM (compact JSON, as JSON.stringify emits) to World's /api/v4/verify/{rp_id} over an HTTPS
3566
3580
  /// outcall (never trust the client). The v4 endpoint verifies both 4.0 proofs and legacy 3.0 proofs,
@@ -3569,7 +3583,7 @@ type Engram =
3569
3583
  /// store to the payload the verifier actually accepted. Only proof_of_human credentials are accepted
3570
3584
  /// (selfie is farmable, passport/mnc are document identity — a different tier). Sets worldIdVerified
3571
3585
  /// and stores the result ONLY on a real verification success — never self-asserted.
3572
- setWorldIdProof: (resultJson: text, nullifier: text) -> (Result_1);
3586
+ setWorldIdProof: (resultJson: text, nullifier: text) -> (Result_2);
3573
3587
  /// Sign a registered type. ONE call, owner-only, freeze-gated — the delay lives on registration
3574
3588
  /// (D2), never here: an emergency withdrawal must not need two owner round-trips.
3575
3589
  ///
@@ -3579,7 +3593,7 @@ type Engram =
3579
3593
  signEip712: (typeId: blob, values: vec record {
3580
3594
  text;
3581
3595
  Eip712Value;
3582
- }) -> (Result_4);
3596
+ }) -> (Result_5);
3583
3597
  /// Sign the engram's own ERC-8004 registration tx for client-side broadcast: the engram signs, the client
3584
3598
  /// broadcasts and keeps the resulting registration id.
3585
3599
  ///
@@ -3614,7 +3628,7 @@ type Engram =
3614
3628
  maxFeePerGas: nat;
3615
3629
  maxPriorityFeePerGas: nat;
3616
3630
  nonce: nat;
3617
- }) -> (Result_9);
3631
+ }) -> (Result_10);
3618
3632
  /// Sign an EIP-3009 authorization for x402 payment. Agent-accessible.
3619
3633
  /// Client probes the URL, extracts chain/token/recipient/amount from the 402, and calls this.
3620
3634
  /// Canister signs → returns header → client retries with header.
@@ -3645,7 +3659,7 @@ type Engram =
3645
3659
  tokenAddress: text;
3646
3660
  tokenName: text;
3647
3661
  tokenVersion: text;
3648
- }) -> (Result_3);
3662
+ }) -> (Result_4);
3649
3663
  /// ⟨2026-10-21, the owner's round-11 answer e⟩ A GUARDIAN STEPS DOWN: the caller ends their own
3650
3664
  /// guardianship of this engram. It removes a power from the one who holds it and grants none.
3651
3665
  /// Before, only the owner could remove a guardian, so one who wanted out could only stop watching
@@ -3665,7 +3679,7 @@ type Engram =
3665
3679
  /// WHAT IT LEAVES: a brake this guardian pulled stays on — lifting one is the owner's; their
3666
3680
  /// disputes stay on the record. Like `removeGuardian`, it is not terminal: the owner may invite
3667
3681
  /// the same person again.
3668
- stepDownAsGuardian: () -> (Result_1);
3682
+ stepDownAsGuardian: () -> (Result_2);
3669
3683
  /// OWNER force-close, for a session the payer abandoned.
3670
3684
  ///
3671
3685
  /// ⟨R1b, ruled 2026-08-26: owner-gated, NO guardian.⟩ It moves someone else's money, and only ever
@@ -3685,7 +3699,7 @@ type Engram =
3685
3699
  /// stays false here until it is renamed too. Left for the owner: the rename is free until the cut
3686
3700
  /// and a break after it, and it also moves `packages/client/README.md` and
3687
3701
  /// `docs/AGENT-ONBOARDING.md`, which name it.
3688
- sysForceCloseSession: (sessionId: text) -> (Result_1);
3702
+ sysForceCloseSession: (sessionId: text) -> (Result_2);
3689
3703
  /// The metrics reader the registry designated reads every engagement's seat weeks, in one call.
3690
3704
  ///
3691
3705
  /// CALLER: the metrics reader the spawning registry named on this engram (`metricsReaderId`), and
@@ -3702,7 +3716,7 @@ type Engram =
3702
3716
  /// owner can see every time the reader read. A refusal is `#Refused` naming this method and the
3703
3717
  /// class (`SeatWeeks.readRefusal`), never an empty list: an empty list is a real answer ("no agent
3704
3718
  /// has paired here"), and a fabricated one would be counted as one.
3705
- sysGetAgentSeatWeeks: () -> (Result_8);
3719
+ sysGetAgentSeatWeeks: () -> (Result_9);
3706
3720
  /// The metrics reader the registry designated reads this engram's paid-rail health, in one call:
3707
3721
  /// the balance and the line it must stay above, the memory that line is computed from, the sessions
3708
3722
  /// by state, the escrow open sessions hold, the vouchers spent and the refused ones
@@ -3724,7 +3738,7 @@ type Engram =
3724
3738
  /// (`RailHealth.readRefusal`), never a zero balance: a made-up zero would read as an engram about
3725
3739
  /// to freeze. Called by another canister, a query runs replicated and this engram pays for it —
3726
3740
  /// a few million cycles an hour, the cost of being watched.
3727
- sysGetRailHealth: () -> (Result_7) query;
3741
+ sysGetRailHealth: () -> (Result_8) query;
3728
3742
  /// The cashier reads how many signatures this engram has produced, per caller and in total.
3729
3743
  /// ⟨2026-09-28⟩ The owner's decision of that date: a running counter on the engram, exported to
3730
3744
  /// the cashier — and to nobody else (`AccessControl.requireCashierForSignatureCounts`).
@@ -3747,7 +3761,7 @@ type Engram =
3747
3761
  /// bills from this: the number comes from a canister its owner controls and can reinstall, so bill
3748
3762
  /// only engrams the registry confirms run published code, and read a lower count than last time as
3749
3763
  /// a reinstall — the reasoning is at `signaturesByCaller`.
3750
- sysGetSignatureCounts: () -> (Result_6);
3764
+ sysGetSignatureCounts: () -> (Result_7);
3751
3765
  /// Note a restart the registry just made: what this engram owes for it, the floor a repayment may
3752
3766
  /// not go under, and until when to keep its timers quiet.
3753
3767
  ///
@@ -3760,7 +3774,7 @@ type Engram =
3760
3774
  keepCycles: nat;
3761
3775
  loan: nat;
3762
3776
  quietUntilNs: int;
3763
- }) -> (Result_1);
3777
+ }) -> (Result_2);
3764
3778
  /// Rent lifecycle notice — how the OWNER (not the agent) learns their subscription lapsed. D6
3765
3779
  /// shipped the handoff but every alarm it added talks to the operating service's watchdog; the
3766
3780
  /// doc named the debt plainly: "an owner learns of their own lapse only by looking." This closes
@@ -3771,7 +3785,7 @@ type Engram =
3771
3785
  /// Gated exactly like sysRecordFeeEvent (spawnedBy or cashierId): the sweep is the only thing that
3772
3786
  /// OBSERVES the transition, so it is the only thing that can report it. The state whitelist is
3773
3787
  /// closed — this is a lifecycle feed, not a free-text push surface into the owner's audit chain.
3774
- sysNotifyRentLifecycle: (state: text, detail: text) -> (Result_1);
3788
+ sysNotifyRentLifecycle: (state: text, detail: text) -> (Result_2);
3775
3789
  /// ⟨0.16.0⟩ `getWalletActivation()` DELETED — folded to `about().walletActivatedAtNs`, with its
3776
3790
  /// custody-posture rationale carried onto the field. "Can this thing hold money" is a question a
3777
3791
  /// counterparty is entitled to ask before dealing with an engram, which is why it stays public.
@@ -3803,7 +3817,7 @@ type Engram =
3803
3817
  /// The audit line records this engram as the subject, and `surface=endpoint-listed` is what names
3804
3818
  /// the origin: only the configured market can pass that value, so the line cannot be produced by
3805
3819
  /// any other caller.
3806
- sysNotifyWalletActivity: (surface: text) -> (Result_1);
3820
+ sysNotifyWalletActivity: (surface: text) -> (Result_2);
3807
3821
  /// The rent RECEIPT seam (B2): the cashier tells this engram that money moved on its behalf, and
3808
3822
  /// the engram appends a `fee.recorded` line to its own audit chain. It computes nothing.
3809
3823
  ///
@@ -3838,7 +3852,7 @@ type Engram =
3838
3852
  cycles: nat;
3839
3853
  paidThroughNs: opt int;
3840
3854
  scheduleVersion: opt text;
3841
- }) -> (Result_1);
3855
+ }) -> (Result_2);
3842
3856
  /// Give back what a paid security update advanced this engram and the install did not use.
3843
3857
  ///
3844
3858
  /// CALLER: the registry that spawned this engram, right after it installed a security update it
@@ -3846,6 +3860,9 @@ type Engram =
3846
3860
  /// above its balance before the update, and what sits above its 30-day reserve plus send headroom
3847
3861
  /// (`RestartRepay.giveBack`) — attached to the registry's `sysRepayUpgradeAdvance`, which accepts no
3848
3862
  /// more than it advanced. The registry writes off what is not returned; nothing is owed after.
3863
+ /// ⟨CORRECTED 2026-10-28, beside "its 30-day reserve" above — the owner's ruling "1"⟩ The reserve is
3864
+ /// this engram's freezing reserve at its own setting (`freezeReservation` = `lineEstimate`), not a
3865
+ /// 30-day figure: about 430B more at a ~305-day setting.
3849
3866
  /// ⟨2026-10-26, the owner's review choice 1B: "take back only what we added; anything left over goes
3850
3867
  /// to the 90-day write-off"⟩ The registry now names the ONE advance it is asking for (`advanceId`,
3851
3868
  /// the one its deposit for this install put on its ledger) and `advance` is that advance's amount
@@ -3860,7 +3877,7 @@ type Engram =
3860
3877
  advance: nat;
3861
3878
  advanceId: nat;
3862
3879
  balanceBefore: nat;
3863
- }) -> (Result_5);
3880
+ }) -> (Result_6);
3864
3881
  /// Point this engram at the biller that converts its tokens → cycles. Settable, not hardcoded:
3865
3882
  /// coupling is by principal id, so the same wasm runs against any deployment's biller.
3866
3883
  ///
@@ -3876,7 +3893,7 @@ type Engram =
3876
3893
  /// `convertEarningsToCycles` fails closed against a null biller, and with the owner leg gone
3877
3894
  /// nobody but the spawning registry can fix it. That refusal therefore names the real remedy
3878
3895
  /// rather than telling an owner to run a call they can no longer make.
3879
- sysSetBillerId: (id: principal) -> (Result_1);
3896
+ sysSetBillerId: (id: principal) -> (Result_2);
3880
3897
  /// Give this engram its BIRTH CHAIN: its ancestors' birth records and its own, root first, its own
3881
3898
  /// last ⟨2026-10-26, the owner's lineage rulings L2C-lite and L3A⟩.
3882
3899
  ///
@@ -3891,7 +3908,7 @@ type Engram =
3891
3908
  /// a push whose reply was lost); a different one is refused `#Conflict`. THE ENGRAM DOES NOT HASH:
3892
3909
  /// it checks only that the chain ends with its own record. The fingerprints are the registry's to
3893
3910
  /// certify and the client's `verifyBirthChain` to check.
3894
- sysSetBirthChain: (chain: vec BirthRecord) -> (Result_1);
3911
+ sysSetBirthChain: (chain: vec BirthRecord) -> (Result_2);
3895
3912
  /// Point this engram at the commerce satellite allowed to ask it for signatures. ⟨0.16.0, B1⟩
3896
3913
  ///
3897
3914
  /// SAME AUTHORITY AS `sysSetBillerId`, and for a stronger reason. That one routes money; this one
@@ -3903,7 +3920,7 @@ type Engram =
3903
3920
  /// never be sold through the market, and no owner action fixes it. Both `sysSign*` methods refuse
3904
3921
  /// against a null pointer and their refusals name the registry as the remedy rather than telling
3905
3922
  /// an owner to run a call they cannot make.
3906
- sysSetMarketId: (id: principal) -> (Result_1);
3923
+ sysSetMarketId: (id: principal) -> (Result_2);
3907
3924
  /// Name the metrics reader allowed to read this engram's seat weeks (`sysGetAgentSeatWeeks`).
3908
3925
  /// ⟨2026-10-02, the owner's ruling of that day⟩
3909
3926
  ///
@@ -3923,7 +3940,7 @@ type Engram =
3923
3940
  /// SET ONCE. The same reader again answers `#Ok` and changes nothing; another is refused `#Conflict`
3924
3941
  /// (`AccessControl.setOnce` says why). Still never cleared. The chained record entry
3925
3942
  /// (`metrics.sysSetMetricsReaderId`) is the evidence of when the read was granted, and to whom.
3926
- sysSetMetricsReaderId: (reader: principal) -> (Result_1);
3943
+ sysSetMetricsReaderId: (reader: principal) -> (Result_2);
3927
3944
  /// The market asks this engram to sign a registered type — B1's seam, settlement leg. ⟨0.16.0⟩
3928
3945
  ///
3929
3946
  /// THE ENGRAM DOES NOT TRUST THE MARKET WITH ANYTHING BEYOND "ask". Every control that bounds
@@ -3940,7 +3957,7 @@ type Engram =
3940
3957
  sysSignEip712: (typeId: blob, values: vec record {
3941
3958
  text;
3942
3959
  Eip712Value;
3943
- }) -> (Result_4);
3960
+ }) -> (Result_5);
3944
3961
  /// The market asks this engram to sign an x402 payment — B1's seam, the paid-request leg. ⟨0.16.0⟩
3945
3962
  ///
3946
3963
  /// THE MARKET SUPPLIES THE REQUEST; THE ENGRAM SUPPLIES THE POLICY. Every control below the caller
@@ -3957,14 +3974,14 @@ type Engram =
3957
3974
  /// for ALL market traffic; per-seller limits are not expressible in the store it reads.
3958
3975
  sysSignX402Payment: (chainId: nat, tokenAddress: text, recipient:
3959
3976
  text, amount: nat, tokenName: text, tokenVersion: text, rationale:
3960
- opt text, approvalId: opt text) -> (Result_3);
3977
+ opt text, approvalId: opt text) -> (Result_4);
3961
3978
  /// Write an `alerts.test` entry into the audit log; the drain timer delivers it to the webhook
3962
3979
  /// within ~60s. Owner-only; requires a configured URL so the test can actually go somewhere.
3963
- testActionAlert: () -> (Result_1);
3980
+ testActionAlert: () -> (Result_2);
3964
3981
  /// Guardian test alert — an audited guardian action (`alerts.test`, role Guardian) that every
3965
3982
  /// armed channel (owner + guardians) receives within ~60s. Requires the caller's own channel
3966
3983
  /// to be armed so the test has somewhere to land for them.
3967
- testGuardianAlert: () -> (Result_1);
3984
+ testGuardianAlert: () -> (Result_2);
3968
3985
  /// RENAMED from `init` (L2.4). This is the OWNERSHIP-TRANSFER method — the most consequential
3969
3986
  /// owner-facing operation on the canister — and it was named for first-time setup, colliding with
3970
3987
  /// the actor's own `service : (initArgs)`. A reader scanning for "how does ownership move" found
@@ -4002,7 +4019,7 @@ type Engram =
4002
4019
  /// control to the same owner again and reports it, and it writes NO entry to
4003
4020
  /// `listOwnershipTransfers` (until this day it wrote one from the owner to themselves, a hand-on
4004
4021
  /// that did not happen). The record entry says it was a report. `ControlHandover.isReport`.
4005
- transferOwnership: (newOwner: principal) -> (Result_2);
4022
+ transferOwnership: (newOwner: principal) -> (Result_3);
4006
4023
  /// OWNER-ONLY release of the payment freeze — and the asymmetry with `freezePayments` is the
4007
4024
  /// governance design, not an oversight.
4008
4025
  ///
@@ -4014,7 +4031,18 @@ type Engram =
4014
4031
  /// unilaterally.
4015
4032
  /// So a guardian's freeze is a TRIPWIRE, not a lock — it buys the time it takes the owner to
4016
4033
  /// look, and no more.
4017
- unfreezePayments: () -> (Result_1);
4034
+ unfreezePayments: () -> (Result_2);
4035
+ /// Wake this engram's timers after it paused them to save compute near its freezing line. Owner
4036
+ /// only. Refused, by name, below the room the hourly check-in needs; then nothing is armed.
4037
+ ///
4038
+ /// CALLER: the engram's owner, from the owner's app (its status line and its compute page), and
4039
+ /// nobody else (ADR-0020). ⟨2026-10-28, the owner's ruling "1": "it wakes on the next payment, agent
4040
+ /// request or your Wake"⟩ The automatic doors (the biller's receipt, Convert, an agent's MCP request)
4041
+ /// wake it when compute lands with room; this is the owner's door, for compute that arrived with no
4042
+ /// receipt (a bare top-up). It always reads the engram's own balance (no rate limit, no free filter),
4043
+ /// so a refusal states what the engram measured. Both figures in a refusal are its own READING above
4044
+ /// its line, which runs ~82B below the true figure, so the engram never calls it the gap.
4045
+ wakeTimers: () -> (Result_1);
4018
4046
  /// Consensus transform for the World ID /verify outcall. Replicas each call independently, so the raw
4019
4047
  /// response (timestamps, `uses`, request-id headers) is non-deterministic. Collapse it to a single
4020
4048
  /// canonical byte — "1" iff HTTP 200 AND the body asserts success — with no headers, so every replica
@@ -4374,6 +4402,8 @@ type AnchorPushStatus =
4374
4402
  okTotal: nat;
4375
4403
  skipCursor: nat;
4376
4404
  timerTickAtNs: opt int;
4405
+ timersPauseReason: opt text;
4406
+ timersPausedAtNs: opt int;
4377
4407
  };
4378
4408
  type AlertStatus =
4379
4409
  record {
@@ -4521,6 +4551,7 @@ type About =
4521
4551
  paidMemoryReadEnabled: bool;
4522
4552
  paidMemoryWriteEnabled: bool;
4523
4553
  paymentsFrozen: bool;
4554
+ timersPausedSinceDayNs: opt int;
4524
4555
  totalBackupSize: nat;
4525
4556
  totalMemoryReads: nat;
4526
4557
  totalMemoryWrites: nat;