@engramx/idl 0.16.0-rc.17 → 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 +272 -241
- package/dist/engram.idl.d.ts +268 -240
- package/dist/engram.idl.js +246 -240
- package/package.json +2 -2
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:
|
|
256
|
+
Ok: vec Seat;
|
|
252
257
|
};
|
|
253
|
-
type
|
|
258
|
+
type Result_83 =
|
|
254
259
|
variant {
|
|
255
260
|
Err: Error;
|
|
256
261
|
Ok: AgentRecord;
|
|
257
262
|
};
|
|
258
|
-
type
|
|
263
|
+
type Result_82 =
|
|
259
264
|
variant {
|
|
260
265
|
Err: Error;
|
|
261
266
|
Ok: record {activatesAtNs: int;};
|
|
262
267
|
};
|
|
263
|
-
type
|
|
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:
|
|
281
|
+
Ok: RailHealth;
|
|
272
282
|
};
|
|
273
283
|
type Result_79 =
|
|
274
284
|
variant {
|
|
275
285
|
Err: Error;
|
|
276
|
-
Ok:
|
|
286
|
+
Ok: MemoryRangeExport;
|
|
277
287
|
};
|
|
278
|
-
type
|
|
288
|
+
type Result_77 =
|
|
279
289
|
variant {
|
|
280
290
|
Err: Error;
|
|
281
|
-
Ok:
|
|
291
|
+
Ok: Page_25;
|
|
282
292
|
};
|
|
283
293
|
type Result_76 =
|
|
284
294
|
variant {
|
|
285
295
|
Err: Error;
|
|
286
|
-
Ok:
|
|
296
|
+
Ok: AgentWriteReview;
|
|
287
297
|
};
|
|
288
298
|
type Result_75 =
|
|
289
299
|
variant {
|
|
290
300
|
Err: Error;
|
|
291
|
-
Ok:
|
|
301
|
+
Ok: BackupMetadata;
|
|
292
302
|
};
|
|
293
303
|
type Result_74 =
|
|
294
304
|
variant {
|
|
295
305
|
Err: Error;
|
|
296
|
-
Ok:
|
|
306
|
+
Ok: BackupRetention;
|
|
297
307
|
};
|
|
298
308
|
type Result_73 =
|
|
299
309
|
variant {
|
|
300
310
|
Err: Error;
|
|
301
|
-
Ok:
|
|
311
|
+
Ok: vec BirthRecord;
|
|
302
312
|
};
|
|
303
313
|
type Result_72 =
|
|
304
314
|
variant {
|
|
305
315
|
Err: Error;
|
|
306
|
-
Ok:
|
|
316
|
+
Ok: Brakes;
|
|
307
317
|
};
|
|
308
318
|
type Result_71 =
|
|
309
319
|
variant {
|
|
310
320
|
Err: Error;
|
|
311
|
-
Ok:
|
|
321
|
+
Ok: ChildAllowanceRow;
|
|
312
322
|
};
|
|
313
323
|
type Result_70 =
|
|
314
324
|
variant {
|
|
315
325
|
Err: Error;
|
|
316
|
-
Ok:
|
|
326
|
+
Ok: ChildOpening;
|
|
317
327
|
};
|
|
318
328
|
type Result_7 =
|
|
319
329
|
variant {
|
|
320
330
|
Err: Error;
|
|
321
|
-
Ok:
|
|
331
|
+
Ok: SignatureCounts;
|
|
322
332
|
};
|
|
323
333
|
type Result_69 =
|
|
324
334
|
variant {
|
|
325
335
|
Err: Error;
|
|
326
|
-
Ok:
|
|
336
|
+
Ok: blob;
|
|
327
337
|
};
|
|
328
338
|
type Result_68 =
|
|
329
339
|
variant {
|
|
330
340
|
Err: Error;
|
|
331
|
-
Ok:
|
|
341
|
+
Ok: EvmAddresses;
|
|
332
342
|
};
|
|
333
343
|
type Result_67 =
|
|
334
344
|
variant {
|
|
335
345
|
Err: Error;
|
|
336
|
-
Ok:
|
|
346
|
+
Ok: AlertStatus;
|
|
337
347
|
};
|
|
338
348
|
type Result_66 =
|
|
339
349
|
variant {
|
|
340
350
|
Err: Error;
|
|
341
|
-
Ok:
|
|
351
|
+
Ok: MemoryHistory;
|
|
342
352
|
};
|
|
343
353
|
type Result_65 =
|
|
344
354
|
variant {
|
|
345
355
|
Err: Error;
|
|
346
|
-
Ok:
|
|
356
|
+
Ok: MemoryRetentionPolicy;
|
|
347
357
|
};
|
|
348
358
|
type Result_64 =
|
|
349
359
|
variant {
|
|
350
360
|
Err: Error;
|
|
351
|
-
Ok:
|
|
361
|
+
Ok: OwnerConsole;
|
|
352
362
|
};
|
|
353
363
|
type Result_63 =
|
|
354
364
|
variant {
|
|
355
365
|
Err: Error;
|
|
356
|
-
Ok:
|
|
366
|
+
Ok: record {paths: vec text;};
|
|
357
367
|
};
|
|
358
368
|
type Result_62 =
|
|
359
369
|
variant {
|
|
360
370
|
Err: Error;
|
|
361
|
-
Ok:
|
|
371
|
+
Ok: SigningFloorStatus;
|
|
362
372
|
};
|
|
363
373
|
type Result_61 =
|
|
364
374
|
variant {
|
|
365
375
|
Err: Error;
|
|
366
|
-
Ok:
|
|
376
|
+
Ok: SpendCeiling;
|
|
367
377
|
};
|
|
368
378
|
type Result_60 =
|
|
369
379
|
variant {
|
|
370
380
|
Err: Error;
|
|
371
|
-
Ok:
|
|
381
|
+
Ok: SpendingPolicy;
|
|
372
382
|
};
|
|
373
383
|
type Result_6 =
|
|
374
384
|
variant {
|
|
375
385
|
Err: Error;
|
|
376
|
-
Ok:
|
|
386
|
+
Ok: record {returned: nat;};
|
|
377
387
|
};
|
|
378
388
|
type Result_59 =
|
|
379
389
|
variant {
|
|
380
390
|
Err: Error;
|
|
381
|
-
Ok:
|
|
391
|
+
Ok: StorageReport;
|
|
382
392
|
};
|
|
383
393
|
type Result_58 =
|
|
384
394
|
variant {
|
|
385
395
|
Err: Error;
|
|
386
|
-
Ok:
|
|
396
|
+
Ok: WalletBalances;
|
|
387
397
|
};
|
|
388
398
|
type Result_57 =
|
|
389
399
|
variant {
|
|
390
400
|
Err: Error;
|
|
391
|
-
Ok:
|
|
401
|
+
Ok: WorldIdConfig;
|
|
392
402
|
};
|
|
393
403
|
type Result_56 =
|
|
394
404
|
variant {
|
|
395
405
|
Err: Error;
|
|
396
|
-
Ok:
|
|
406
|
+
Ok: WorldIdRpContext;
|
|
397
407
|
};
|
|
398
408
|
type Result_55 =
|
|
399
409
|
variant {
|
|
400
410
|
Err: Error;
|
|
401
|
-
Ok:
|
|
411
|
+
Ok: opt text;
|
|
402
412
|
};
|
|
403
413
|
type Result_54 =
|
|
404
414
|
variant {
|
|
405
415
|
Err: Error;
|
|
406
|
-
Ok:
|
|
416
|
+
Ok: bool;
|
|
407
417
|
};
|
|
408
418
|
type Result_53 =
|
|
409
419
|
variant {
|
|
410
420
|
Err: Error;
|
|
411
|
-
Ok:
|
|
421
|
+
Ok: text;
|
|
412
422
|
};
|
|
413
423
|
type Result_52 =
|
|
414
424
|
variant {
|
|
415
425
|
Err: Error;
|
|
416
|
-
Ok:
|
|
426
|
+
Ok: Page_24;
|
|
417
427
|
};
|
|
418
428
|
type Result_51 =
|
|
419
429
|
variant {
|
|
420
430
|
Err: Error;
|
|
421
|
-
Ok:
|
|
431
|
+
Ok: AgentSpendToday;
|
|
422
432
|
};
|
|
423
433
|
type Result_50 =
|
|
424
434
|
variant {
|
|
425
435
|
Err: Error;
|
|
426
|
-
Ok:
|
|
436
|
+
Ok: Page_22;
|
|
427
437
|
};
|
|
428
438
|
type Result_5 =
|
|
429
439
|
variant {
|
|
430
440
|
Err: Error;
|
|
431
|
-
Ok:
|
|
441
|
+
Ok: Eip712SignatureOut;
|
|
432
442
|
};
|
|
433
443
|
type Result_49 =
|
|
434
444
|
variant {
|
|
435
445
|
Err: Error;
|
|
436
|
-
Ok:
|
|
446
|
+
Ok: Page_21;
|
|
437
447
|
};
|
|
438
448
|
type Result_48 =
|
|
439
449
|
variant {
|
|
440
450
|
Err: Error;
|
|
441
|
-
Ok:
|
|
451
|
+
Ok: RecordPage;
|
|
442
452
|
};
|
|
443
453
|
type Result_47 =
|
|
444
454
|
variant {
|
|
445
455
|
Err: Error;
|
|
446
|
-
Ok:
|
|
456
|
+
Ok: Page_20;
|
|
447
457
|
};
|
|
448
458
|
type Result_46 =
|
|
449
459
|
variant {
|
|
450
460
|
Err: Error;
|
|
451
|
-
Ok:
|
|
461
|
+
Ok: Page_19;
|
|
452
462
|
};
|
|
453
463
|
type Result_45 =
|
|
454
464
|
variant {
|
|
455
465
|
Err: Error;
|
|
456
|
-
Ok:
|
|
466
|
+
Ok: CheckpointPage;
|
|
457
467
|
};
|
|
458
468
|
type Result_44 =
|
|
459
469
|
variant {
|
|
460
470
|
Err: Error;
|
|
461
|
-
Ok:
|
|
471
|
+
Ok: Page_17;
|
|
462
472
|
};
|
|
463
473
|
type Result_43 =
|
|
464
474
|
variant {
|
|
465
475
|
Err: Error;
|
|
466
|
-
Ok:
|
|
476
|
+
Ok: Page_16;
|
|
467
477
|
};
|
|
468
478
|
type Result_42 =
|
|
469
479
|
variant {
|
|
470
480
|
Err: Error;
|
|
471
|
-
Ok:
|
|
481
|
+
Ok: Page_15;
|
|
472
482
|
};
|
|
473
483
|
type Result_41 =
|
|
474
484
|
variant {
|
|
475
485
|
Err: Error;
|
|
476
|
-
Ok:
|
|
486
|
+
Ok: Page_14;
|
|
477
487
|
};
|
|
478
488
|
type Result_40 =
|
|
479
489
|
variant {
|
|
480
490
|
Err: Error;
|
|
481
|
-
Ok:
|
|
491
|
+
Ok: Page_13;
|
|
482
492
|
};
|
|
483
493
|
type Result_4 =
|
|
484
494
|
variant {
|
|
485
495
|
Err: Error;
|
|
486
|
-
Ok:
|
|
496
|
+
Ok: X402SignOutcome;
|
|
487
497
|
};
|
|
488
498
|
type Result_39 =
|
|
489
499
|
variant {
|
|
490
500
|
Err: Error;
|
|
491
|
-
Ok:
|
|
501
|
+
Ok: Page_12;
|
|
492
502
|
};
|
|
493
503
|
type Result_38 =
|
|
494
504
|
variant {
|
|
495
505
|
Err: Error;
|
|
496
|
-
Ok:
|
|
506
|
+
Ok: ReceiptPage;
|
|
497
507
|
};
|
|
498
508
|
type Result_37 =
|
|
499
509
|
variant {
|
|
500
510
|
Err: Error;
|
|
501
|
-
Ok:
|
|
511
|
+
Ok: Page_10;
|
|
502
512
|
};
|
|
503
513
|
type Result_36 =
|
|
504
514
|
variant {
|
|
505
515
|
Err: Error;
|
|
506
|
-
Ok:
|
|
516
|
+
Ok: LogPage;
|
|
507
517
|
};
|
|
508
518
|
type Result_35 =
|
|
509
519
|
variant {
|
|
510
520
|
Err: Error;
|
|
511
|
-
Ok:
|
|
521
|
+
Ok: Page_8;
|
|
512
522
|
};
|
|
513
523
|
type Result_34 =
|
|
514
524
|
variant {
|
|
515
525
|
Err: Error;
|
|
516
|
-
Ok:
|
|
526
|
+
Ok: Page_7;
|
|
517
527
|
};
|
|
518
528
|
type Result_33 =
|
|
519
529
|
variant {
|
|
520
530
|
Err: Error;
|
|
521
|
-
Ok:
|
|
531
|
+
Ok: Page_6;
|
|
522
532
|
};
|
|
523
533
|
type Result_32 =
|
|
524
534
|
variant {
|
|
525
535
|
Err: Error;
|
|
526
|
-
Ok:
|
|
536
|
+
Ok: PaymentSignatureCounts;
|
|
527
537
|
};
|
|
528
538
|
type Result_31 =
|
|
529
539
|
variant {
|
|
530
540
|
Err: Error;
|
|
531
|
-
Ok:
|
|
541
|
+
Ok: Page_4;
|
|
532
542
|
};
|
|
533
543
|
type Result_30 =
|
|
534
544
|
variant {
|
|
535
545
|
Err: Error;
|
|
536
|
-
Ok:
|
|
546
|
+
Ok: Page_3;
|
|
537
547
|
};
|
|
538
548
|
type Result_3 =
|
|
539
549
|
variant {
|
|
540
550
|
Err: Error;
|
|
541
|
-
Ok:
|
|
551
|
+
Ok: ControlHandover;
|
|
542
552
|
};
|
|
543
553
|
type Result_29 =
|
|
544
554
|
variant {
|
|
545
555
|
Err: Error;
|
|
546
|
-
Ok:
|
|
556
|
+
Ok: Page_2;
|
|
547
557
|
};
|
|
548
558
|
type Result_28 =
|
|
549
559
|
variant {
|
|
550
560
|
Err: Error;
|
|
551
|
-
Ok:
|
|
561
|
+
Ok: Page_1;
|
|
552
562
|
};
|
|
553
563
|
type Result_27 =
|
|
554
564
|
variant {
|
|
555
565
|
Err: Error;
|
|
556
|
-
Ok:
|
|
566
|
+
Ok: Page;
|
|
557
567
|
};
|
|
558
568
|
type Result_26 =
|
|
559
569
|
variant {
|
|
560
570
|
Err: Error;
|
|
561
|
-
Ok:
|
|
571
|
+
Ok: AgentGrant;
|
|
562
572
|
};
|
|
563
573
|
type Result_25 =
|
|
564
574
|
variant {
|
|
565
575
|
Err: Error;
|
|
566
|
-
Ok:
|
|
576
|
+
Ok: principal;
|
|
567
577
|
};
|
|
568
578
|
type Result_24 =
|
|
569
579
|
variant {
|
|
570
580
|
Err: Error;
|
|
571
|
-
Ok:
|
|
581
|
+
Ok: EngramSessionState;
|
|
572
582
|
};
|
|
573
583
|
type Result_23 =
|
|
574
584
|
variant {
|
|
575
585
|
Err: Error;
|
|
576
|
-
Ok:
|
|
586
|
+
Ok: Pairing;
|
|
577
587
|
};
|
|
578
588
|
type Result_22 =
|
|
579
589
|
variant {
|
|
580
590
|
Err: Error;
|
|
581
|
-
Ok:
|
|
591
|
+
Ok: CondensePreview;
|
|
582
592
|
};
|
|
583
593
|
type Result_21 =
|
|
584
594
|
variant {
|
|
585
595
|
Err: Error;
|
|
586
|
-
Ok:
|
|
596
|
+
Ok: RetentionPreview;
|
|
587
597
|
};
|
|
588
598
|
type Result_20 =
|
|
589
599
|
variant {
|
|
590
600
|
Err: Error;
|
|
591
|
-
Ok:
|
|
601
|
+
Ok: vec BatchReadItem;
|
|
592
602
|
};
|
|
593
603
|
type Result_2 =
|
|
594
604
|
variant {
|
|
595
605
|
Err: Error;
|
|
596
|
-
Ok
|
|
606
|
+
Ok;
|
|
597
607
|
};
|
|
598
608
|
type Result_19 =
|
|
599
609
|
variant {
|
|
600
610
|
Err: Error;
|
|
601
|
-
Ok:
|
|
611
|
+
Ok: MemoryByteChunk;
|
|
602
612
|
};
|
|
603
613
|
type Result_18 =
|
|
604
614
|
variant {
|
|
605
615
|
Err: Error;
|
|
606
|
-
Ok:
|
|
616
|
+
Ok: EngramEscrowRecovery;
|
|
607
617
|
};
|
|
608
618
|
type Result_17 =
|
|
609
619
|
variant {
|
|
610
620
|
Err: Error;
|
|
611
|
-
Ok:
|
|
621
|
+
Ok: GuardianRecord;
|
|
612
622
|
};
|
|
613
623
|
type Result_16 =
|
|
614
624
|
variant {
|
|
615
625
|
Err: Error;
|
|
616
|
-
Ok:
|
|
626
|
+
Ok: ResetReport;
|
|
617
627
|
};
|
|
618
628
|
type Result_15 =
|
|
619
629
|
variant {
|
|
620
630
|
Err: Error;
|
|
621
|
-
Ok:
|
|
631
|
+
Ok: ResyncReport;
|
|
622
632
|
};
|
|
623
633
|
type Result_14 =
|
|
624
634
|
variant {
|
|
625
635
|
Err: Error;
|
|
626
|
-
Ok:
|
|
636
|
+
Ok: nat;
|
|
627
637
|
};
|
|
628
638
|
type Result_13 =
|
|
629
639
|
variant {
|
|
630
640
|
Err: Error;
|
|
631
|
-
Ok:
|
|
641
|
+
Ok: SessionContext;
|
|
632
642
|
};
|
|
633
643
|
type Result_12 =
|
|
634
644
|
variant {
|
|
635
645
|
Err: Error;
|
|
636
|
-
Ok:
|
|
646
|
+
Ok: MemoryFile;
|
|
637
647
|
};
|
|
638
648
|
type Result_11 =
|
|
639
649
|
variant {
|
|
640
650
|
Err: Error;
|
|
641
|
-
Ok:
|
|
651
|
+
Ok: BackupRetentionReport;
|
|
642
652
|
};
|
|
643
653
|
type Result_10 =
|
|
644
654
|
variant {
|
|
645
655
|
Err: Error;
|
|
646
|
-
Ok:
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
1519
|
+
backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_69) query;
|
|
1510
1520
|
backupPushChunk: (backupId: text, chunkIndex: nat, data: blob) ->
|
|
1511
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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) -> (
|
|
1691
|
+
freezePaymentsWithReason: (reason: text) -> (Result_2);
|
|
1682
1692
|
/// Delivery status + config readback. Owner-only (the URL is a secret).
|
|
1683
|
-
getActionAlertStatus: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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
|
-
(
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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
|
-
(
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
2076
|
-
getStorageStats: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
2783
|
-
openSession: (config: SessionConfig, sig: PaymentSignature) -> (
|
|
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
|
-
(
|
|
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
|
-
}) -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
(
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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
|
-
}) -> (
|
|
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
|
-
}) -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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) -> (
|
|
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
|
-
}) -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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: () -> (
|
|
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) -> (
|
|
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: () -> (
|
|
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;
|