@engramx/idl 0.16.0-rc.14 → 0.16.0-rc.16
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 +495 -147
- package/dist/engram.idl.d.ts +464 -141
- package/dist/engram.idl.js +272 -149
- package/package.json +1 -1
package/dist/engram.did
CHANGED
|
@@ -133,6 +133,11 @@ type SignatureCounts =
|
|
|
133
133
|
byCaller: vec CallerSignatureCount;
|
|
134
134
|
total: nat;
|
|
135
135
|
};
|
|
136
|
+
type SignIn =
|
|
137
|
+
record {
|
|
138
|
+
clientName: opt text;
|
|
139
|
+
token: BearerToken;
|
|
140
|
+
};
|
|
136
141
|
type SessionIntent =
|
|
137
142
|
record {
|
|
138
143
|
costPerCall: opt nat;
|
|
@@ -195,6 +200,24 @@ type Role =
|
|
|
195
200
|
Viewer;
|
|
196
201
|
WasmAdmin;
|
|
197
202
|
};
|
|
203
|
+
type RetentionPreviewRule =
|
|
204
|
+
record {
|
|
205
|
+
bytes: nat;
|
|
206
|
+
copies: nat;
|
|
207
|
+
files: nat;
|
|
208
|
+
notBeforeNs: opt int;
|
|
209
|
+
prefix: text;
|
|
210
|
+
};
|
|
211
|
+
type RetentionPreview =
|
|
212
|
+
record {
|
|
213
|
+
bytes: nat;
|
|
214
|
+
complete: bool;
|
|
215
|
+
copies: nat;
|
|
216
|
+
files: nat;
|
|
217
|
+
planned: nat;
|
|
218
|
+
rules: vec RetentionPreviewRule;
|
|
219
|
+
storedFiles: nat;
|
|
220
|
+
};
|
|
198
221
|
type RetentionClassSpec =
|
|
199
222
|
variant {
|
|
200
223
|
vault;
|
|
@@ -227,25 +250,60 @@ type Result_9 =
|
|
|
227
250
|
Err: Error;
|
|
228
251
|
Ok: BackupRetentionReport;
|
|
229
252
|
};
|
|
253
|
+
type Result_80 =
|
|
254
|
+
variant {
|
|
255
|
+
Err: Error;
|
|
256
|
+
Ok: AgentRecord;
|
|
257
|
+
};
|
|
230
258
|
type Result_8 =
|
|
231
259
|
variant {
|
|
232
260
|
Err: Error;
|
|
233
261
|
Ok: SignedTransaction;
|
|
234
262
|
};
|
|
263
|
+
type Result_79 =
|
|
264
|
+
variant {
|
|
265
|
+
Err: Error;
|
|
266
|
+
Ok: record {activatesAtNs: int;};
|
|
267
|
+
};
|
|
268
|
+
type Result_78 =
|
|
269
|
+
variant {
|
|
270
|
+
Err: Error;
|
|
271
|
+
Ok: Eip712Registration;
|
|
272
|
+
};
|
|
273
|
+
type Result_77 =
|
|
274
|
+
variant {
|
|
275
|
+
Err: Error;
|
|
276
|
+
Ok: CondenseResult;
|
|
277
|
+
};
|
|
278
|
+
type Result_76 =
|
|
279
|
+
variant {
|
|
280
|
+
Err: Error;
|
|
281
|
+
Ok: MemoryRangeExport;
|
|
282
|
+
};
|
|
283
|
+
type Result_74 =
|
|
284
|
+
variant {
|
|
285
|
+
Err: Error;
|
|
286
|
+
Ok: Page_25;
|
|
287
|
+
};
|
|
288
|
+
type Result_73 =
|
|
289
|
+
variant {
|
|
290
|
+
Err: Error;
|
|
291
|
+
Ok: AgentWriteReview;
|
|
292
|
+
};
|
|
235
293
|
type Result_72 =
|
|
236
294
|
variant {
|
|
237
295
|
Err: Error;
|
|
238
|
-
Ok:
|
|
296
|
+
Ok: BackupMetadata;
|
|
239
297
|
};
|
|
240
298
|
type Result_71 =
|
|
241
299
|
variant {
|
|
242
300
|
Err: Error;
|
|
243
|
-
Ok:
|
|
301
|
+
Ok: BackupRetention;
|
|
244
302
|
};
|
|
245
303
|
type Result_70 =
|
|
246
304
|
variant {
|
|
247
305
|
Err: Error;
|
|
248
|
-
Ok:
|
|
306
|
+
Ok: Brakes;
|
|
249
307
|
};
|
|
250
308
|
type Result_7 =
|
|
251
309
|
variant {
|
|
@@ -255,47 +313,52 @@ type Result_7 =
|
|
|
255
313
|
type Result_69 =
|
|
256
314
|
variant {
|
|
257
315
|
Err: Error;
|
|
258
|
-
Ok:
|
|
316
|
+
Ok: ChildAllowanceRow;
|
|
259
317
|
};
|
|
260
318
|
type Result_68 =
|
|
261
319
|
variant {
|
|
262
320
|
Err: Error;
|
|
263
|
-
Ok:
|
|
321
|
+
Ok: ChildOpening;
|
|
322
|
+
};
|
|
323
|
+
type Result_67 =
|
|
324
|
+
variant {
|
|
325
|
+
Err: Error;
|
|
326
|
+
Ok: blob;
|
|
264
327
|
};
|
|
265
328
|
type Result_66 =
|
|
266
329
|
variant {
|
|
267
330
|
Err: Error;
|
|
268
|
-
Ok:
|
|
331
|
+
Ok: EvmAddresses;
|
|
269
332
|
};
|
|
270
333
|
type Result_65 =
|
|
271
334
|
variant {
|
|
272
335
|
Err: Error;
|
|
273
|
-
Ok:
|
|
336
|
+
Ok: AlertStatus;
|
|
274
337
|
};
|
|
275
338
|
type Result_64 =
|
|
276
339
|
variant {
|
|
277
340
|
Err: Error;
|
|
278
|
-
Ok:
|
|
341
|
+
Ok: MemoryHistory;
|
|
279
342
|
};
|
|
280
343
|
type Result_63 =
|
|
281
344
|
variant {
|
|
282
345
|
Err: Error;
|
|
283
|
-
Ok:
|
|
346
|
+
Ok: MemoryRetentionPolicy;
|
|
284
347
|
};
|
|
285
348
|
type Result_62 =
|
|
286
349
|
variant {
|
|
287
350
|
Err: Error;
|
|
288
|
-
Ok:
|
|
351
|
+
Ok: OwnerConsole;
|
|
289
352
|
};
|
|
290
353
|
type Result_61 =
|
|
291
354
|
variant {
|
|
292
355
|
Err: Error;
|
|
293
|
-
Ok:
|
|
356
|
+
Ok: record {paths: vec text;};
|
|
294
357
|
};
|
|
295
358
|
type Result_60 =
|
|
296
359
|
variant {
|
|
297
360
|
Err: Error;
|
|
298
|
-
Ok:
|
|
361
|
+
Ok: SigningFloorStatus;
|
|
299
362
|
};
|
|
300
363
|
type Result_6 =
|
|
301
364
|
variant {
|
|
@@ -305,52 +368,52 @@ type Result_6 =
|
|
|
305
368
|
type Result_59 =
|
|
306
369
|
variant {
|
|
307
370
|
Err: Error;
|
|
308
|
-
Ok:
|
|
371
|
+
Ok: SpendCeiling;
|
|
309
372
|
};
|
|
310
373
|
type Result_58 =
|
|
311
374
|
variant {
|
|
312
375
|
Err: Error;
|
|
313
|
-
Ok:
|
|
376
|
+
Ok: SpendingPolicy;
|
|
314
377
|
};
|
|
315
378
|
type Result_57 =
|
|
316
379
|
variant {
|
|
317
380
|
Err: Error;
|
|
318
|
-
Ok:
|
|
381
|
+
Ok: StorageReport;
|
|
319
382
|
};
|
|
320
383
|
type Result_56 =
|
|
321
384
|
variant {
|
|
322
385
|
Err: Error;
|
|
323
|
-
Ok:
|
|
386
|
+
Ok: WalletBalances;
|
|
324
387
|
};
|
|
325
388
|
type Result_55 =
|
|
326
389
|
variant {
|
|
327
390
|
Err: Error;
|
|
328
|
-
Ok:
|
|
391
|
+
Ok: WorldIdConfig;
|
|
329
392
|
};
|
|
330
393
|
type Result_54 =
|
|
331
394
|
variant {
|
|
332
395
|
Err: Error;
|
|
333
|
-
Ok:
|
|
396
|
+
Ok: WorldIdRpContext;
|
|
334
397
|
};
|
|
335
398
|
type Result_53 =
|
|
336
399
|
variant {
|
|
337
400
|
Err: Error;
|
|
338
|
-
Ok:
|
|
401
|
+
Ok: opt text;
|
|
339
402
|
};
|
|
340
403
|
type Result_52 =
|
|
341
404
|
variant {
|
|
342
405
|
Err: Error;
|
|
343
|
-
Ok:
|
|
406
|
+
Ok: bool;
|
|
344
407
|
};
|
|
345
408
|
type Result_51 =
|
|
346
409
|
variant {
|
|
347
410
|
Err: Error;
|
|
348
|
-
Ok:
|
|
411
|
+
Ok: text;
|
|
349
412
|
};
|
|
350
413
|
type Result_50 =
|
|
351
414
|
variant {
|
|
352
415
|
Err: Error;
|
|
353
|
-
Ok:
|
|
416
|
+
Ok: Page_24;
|
|
354
417
|
};
|
|
355
418
|
type Result_5 =
|
|
356
419
|
variant {
|
|
@@ -360,52 +423,52 @@ type Result_5 =
|
|
|
360
423
|
type Result_49 =
|
|
361
424
|
variant {
|
|
362
425
|
Err: Error;
|
|
363
|
-
Ok:
|
|
426
|
+
Ok: AgentSpendToday;
|
|
364
427
|
};
|
|
365
428
|
type Result_48 =
|
|
366
429
|
variant {
|
|
367
430
|
Err: Error;
|
|
368
|
-
Ok:
|
|
431
|
+
Ok: Page_22;
|
|
369
432
|
};
|
|
370
433
|
type Result_47 =
|
|
371
434
|
variant {
|
|
372
435
|
Err: Error;
|
|
373
|
-
Ok:
|
|
436
|
+
Ok: Page_21;
|
|
374
437
|
};
|
|
375
438
|
type Result_46 =
|
|
376
439
|
variant {
|
|
377
440
|
Err: Error;
|
|
378
|
-
Ok:
|
|
441
|
+
Ok: RecordPage;
|
|
379
442
|
};
|
|
380
443
|
type Result_45 =
|
|
381
444
|
variant {
|
|
382
445
|
Err: Error;
|
|
383
|
-
Ok:
|
|
446
|
+
Ok: Page_20;
|
|
384
447
|
};
|
|
385
448
|
type Result_44 =
|
|
386
449
|
variant {
|
|
387
450
|
Err: Error;
|
|
388
|
-
Ok:
|
|
451
|
+
Ok: Page_19;
|
|
389
452
|
};
|
|
390
453
|
type Result_43 =
|
|
391
454
|
variant {
|
|
392
455
|
Err: Error;
|
|
393
|
-
Ok:
|
|
456
|
+
Ok: CheckpointPage;
|
|
394
457
|
};
|
|
395
458
|
type Result_42 =
|
|
396
459
|
variant {
|
|
397
460
|
Err: Error;
|
|
398
|
-
Ok:
|
|
461
|
+
Ok: Page_17;
|
|
399
462
|
};
|
|
400
463
|
type Result_41 =
|
|
401
464
|
variant {
|
|
402
465
|
Err: Error;
|
|
403
|
-
Ok:
|
|
466
|
+
Ok: Page_16;
|
|
404
467
|
};
|
|
405
468
|
type Result_40 =
|
|
406
469
|
variant {
|
|
407
470
|
Err: Error;
|
|
408
|
-
Ok:
|
|
471
|
+
Ok: Page_15;
|
|
409
472
|
};
|
|
410
473
|
type Result_4 =
|
|
411
474
|
variant {
|
|
@@ -415,52 +478,52 @@ type Result_4 =
|
|
|
415
478
|
type Result_39 =
|
|
416
479
|
variant {
|
|
417
480
|
Err: Error;
|
|
418
|
-
Ok:
|
|
481
|
+
Ok: Page_14;
|
|
419
482
|
};
|
|
420
483
|
type Result_38 =
|
|
421
484
|
variant {
|
|
422
485
|
Err: Error;
|
|
423
|
-
Ok:
|
|
486
|
+
Ok: Page_13;
|
|
424
487
|
};
|
|
425
488
|
type Result_37 =
|
|
426
489
|
variant {
|
|
427
490
|
Err: Error;
|
|
428
|
-
Ok:
|
|
491
|
+
Ok: Page_12;
|
|
429
492
|
};
|
|
430
493
|
type Result_36 =
|
|
431
494
|
variant {
|
|
432
495
|
Err: Error;
|
|
433
|
-
Ok:
|
|
496
|
+
Ok: ReceiptPage;
|
|
434
497
|
};
|
|
435
498
|
type Result_35 =
|
|
436
499
|
variant {
|
|
437
500
|
Err: Error;
|
|
438
|
-
Ok:
|
|
501
|
+
Ok: Page_10;
|
|
439
502
|
};
|
|
440
503
|
type Result_34 =
|
|
441
504
|
variant {
|
|
442
505
|
Err: Error;
|
|
443
|
-
Ok:
|
|
506
|
+
Ok: LogPage;
|
|
444
507
|
};
|
|
445
508
|
type Result_33 =
|
|
446
509
|
variant {
|
|
447
510
|
Err: Error;
|
|
448
|
-
Ok:
|
|
511
|
+
Ok: Page_8;
|
|
449
512
|
};
|
|
450
513
|
type Result_32 =
|
|
451
514
|
variant {
|
|
452
515
|
Err: Error;
|
|
453
|
-
Ok:
|
|
516
|
+
Ok: Page_7;
|
|
454
517
|
};
|
|
455
518
|
type Result_31 =
|
|
456
519
|
variant {
|
|
457
520
|
Err: Error;
|
|
458
|
-
Ok:
|
|
521
|
+
Ok: Page_6;
|
|
459
522
|
};
|
|
460
523
|
type Result_30 =
|
|
461
524
|
variant {
|
|
462
525
|
Err: Error;
|
|
463
|
-
Ok:
|
|
526
|
+
Ok: PaymentSignatureCounts;
|
|
464
527
|
};
|
|
465
528
|
type Result_3 =
|
|
466
529
|
variant {
|
|
@@ -470,52 +533,52 @@ type Result_3 =
|
|
|
470
533
|
type Result_29 =
|
|
471
534
|
variant {
|
|
472
535
|
Err: Error;
|
|
473
|
-
Ok:
|
|
536
|
+
Ok: Page_4;
|
|
474
537
|
};
|
|
475
538
|
type Result_28 =
|
|
476
539
|
variant {
|
|
477
540
|
Err: Error;
|
|
478
|
-
Ok:
|
|
541
|
+
Ok: Page_3;
|
|
479
542
|
};
|
|
480
543
|
type Result_27 =
|
|
481
544
|
variant {
|
|
482
545
|
Err: Error;
|
|
483
|
-
Ok:
|
|
546
|
+
Ok: Page_2;
|
|
484
547
|
};
|
|
485
548
|
type Result_26 =
|
|
486
549
|
variant {
|
|
487
550
|
Err: Error;
|
|
488
|
-
Ok:
|
|
551
|
+
Ok: Page_1;
|
|
489
552
|
};
|
|
490
553
|
type Result_25 =
|
|
491
554
|
variant {
|
|
492
555
|
Err: Error;
|
|
493
|
-
Ok:
|
|
556
|
+
Ok: Page;
|
|
494
557
|
};
|
|
495
558
|
type Result_24 =
|
|
496
559
|
variant {
|
|
497
560
|
Err: Error;
|
|
498
|
-
Ok:
|
|
561
|
+
Ok: AgentGrant;
|
|
499
562
|
};
|
|
500
563
|
type Result_23 =
|
|
501
564
|
variant {
|
|
502
565
|
Err: Error;
|
|
503
|
-
Ok:
|
|
566
|
+
Ok: principal;
|
|
504
567
|
};
|
|
505
568
|
type Result_22 =
|
|
506
569
|
variant {
|
|
507
570
|
Err: Error;
|
|
508
|
-
Ok:
|
|
571
|
+
Ok: EngramSessionState;
|
|
509
572
|
};
|
|
510
573
|
type Result_21 =
|
|
511
574
|
variant {
|
|
512
575
|
Err: Error;
|
|
513
|
-
Ok:
|
|
576
|
+
Ok: Pairing;
|
|
514
577
|
};
|
|
515
578
|
type Result_20 =
|
|
516
579
|
variant {
|
|
517
580
|
Err: Error;
|
|
518
|
-
Ok:
|
|
581
|
+
Ok: CondensePreview;
|
|
519
582
|
};
|
|
520
583
|
type Result_2 =
|
|
521
584
|
variant {
|
|
@@ -525,7 +588,7 @@ type Result_2 =
|
|
|
525
588
|
type Result_19 =
|
|
526
589
|
variant {
|
|
527
590
|
Err: Error;
|
|
528
|
-
Ok:
|
|
591
|
+
Ok: RetentionPreview;
|
|
529
592
|
};
|
|
530
593
|
type Result_18 =
|
|
531
594
|
variant {
|
|
@@ -605,10 +668,17 @@ type RecordPage =
|
|
|
605
668
|
sealed: vec SealedEntry;
|
|
606
669
|
total: nat;
|
|
607
670
|
};
|
|
671
|
+
type RecordNote =
|
|
672
|
+
record {
|
|
673
|
+
about: nat;
|
|
674
|
+
atNs: int;
|
|
675
|
+
auditId: nat;
|
|
676
|
+
note: text;
|
|
677
|
+
};
|
|
608
678
|
type ReceiptPage =
|
|
609
679
|
record {
|
|
610
680
|
firstAvailableSeq: nat;
|
|
611
|
-
page:
|
|
681
|
+
page: Page_11;
|
|
612
682
|
scannedThroughSeq: nat;
|
|
613
683
|
};
|
|
614
684
|
type RailHealth =
|
|
@@ -639,7 +709,7 @@ type PurgedAgent =
|
|
|
639
709
|
};
|
|
640
710
|
type PaymentSignatureCounts =
|
|
641
711
|
record {
|
|
642
|
-
agents:
|
|
712
|
+
agents: Page_5;
|
|
643
713
|
day: int;
|
|
644
714
|
limit: nat;
|
|
645
715
|
marketplace: opt MarketplacePaymentSignatures;
|
|
@@ -655,6 +725,16 @@ type PaymentSignature =
|
|
|
655
725
|
sender: text;
|
|
656
726
|
signature: blob;
|
|
657
727
|
};
|
|
728
|
+
type PaymentLimits =
|
|
729
|
+
record {
|
|
730
|
+
maxConcurrentSessions: opt nat;
|
|
731
|
+
maxPerDay: opt nat;
|
|
732
|
+
maxPerTransaction: opt nat;
|
|
733
|
+
maxSessionDeposit: opt nat;
|
|
734
|
+
maxSessionDuration: opt int;
|
|
735
|
+
rateLimitPerMinute: opt nat;
|
|
736
|
+
sessionIdleTimeout: opt int;
|
|
737
|
+
};
|
|
658
738
|
type Pairing =
|
|
659
739
|
record {
|
|
660
740
|
agent: AgentRecord;
|
|
@@ -662,75 +742,71 @@ type Pairing =
|
|
|
662
742
|
};
|
|
663
743
|
type Page_9 =
|
|
664
744
|
record {
|
|
665
|
-
items: vec
|
|
745
|
+
items: vec MemoryLogEvent;
|
|
666
746
|
total: nat;
|
|
667
747
|
withheld: nat;
|
|
668
748
|
};
|
|
669
749
|
type Page_8 =
|
|
670
750
|
record {
|
|
671
|
-
items: vec
|
|
672
|
-
lastModifiedAtNs: int;
|
|
673
|
-
path: text;
|
|
674
|
-
version: nat;
|
|
675
|
-
};
|
|
751
|
+
items: vec ApprovalRequest;
|
|
676
752
|
total: nat;
|
|
677
753
|
withheld: nat;
|
|
678
754
|
};
|
|
679
755
|
type Page_7 =
|
|
680
756
|
record {
|
|
681
|
-
items: vec
|
|
757
|
+
items: vec EngramSessionState;
|
|
682
758
|
total: nat;
|
|
683
759
|
withheld: nat;
|
|
684
760
|
};
|
|
685
761
|
type Page_6 =
|
|
686
762
|
record {
|
|
687
|
-
items: vec
|
|
763
|
+
items: vec OwnershipTransfer;
|
|
688
764
|
total: nat;
|
|
689
765
|
withheld: nat;
|
|
690
766
|
};
|
|
691
767
|
type Page_5 =
|
|
692
768
|
record {
|
|
693
|
-
items: vec
|
|
769
|
+
items: vec AgentPaymentSignatures;
|
|
694
770
|
total: nat;
|
|
695
771
|
withheld: nat;
|
|
696
772
|
};
|
|
697
773
|
type Page_4 =
|
|
698
774
|
record {
|
|
699
|
-
items: vec
|
|
775
|
+
items: vec PurgedAgent;
|
|
700
776
|
total: nat;
|
|
701
777
|
withheld: nat;
|
|
702
778
|
};
|
|
703
779
|
type Page_3 =
|
|
704
780
|
record {
|
|
705
|
-
items: vec
|
|
781
|
+
items: vec AuditEntry;
|
|
706
782
|
total: nat;
|
|
707
783
|
withheld: nat;
|
|
708
784
|
};
|
|
709
|
-
type
|
|
785
|
+
type Page_25 =
|
|
710
786
|
record {
|
|
711
787
|
items: vec OwnerRow;
|
|
712
788
|
total: nat;
|
|
713
789
|
withheld: nat;
|
|
714
790
|
};
|
|
715
|
-
type
|
|
791
|
+
type Page_24 =
|
|
716
792
|
record {
|
|
717
793
|
items: vec ActivitySnapshot;
|
|
718
794
|
total: nat;
|
|
719
795
|
withheld: nat;
|
|
720
796
|
};
|
|
721
|
-
type
|
|
797
|
+
type Page_23 =
|
|
722
798
|
record {
|
|
723
|
-
items: vec
|
|
799
|
+
items: vec AgentSpendRow;
|
|
724
800
|
total: nat;
|
|
725
801
|
withheld: nat;
|
|
726
802
|
};
|
|
727
|
-
type
|
|
803
|
+
type Page_22 =
|
|
728
804
|
record {
|
|
729
805
|
items: vec AgentRecord;
|
|
730
806
|
total: nat;
|
|
731
807
|
withheld: nat;
|
|
732
808
|
};
|
|
733
|
-
type
|
|
809
|
+
type Page_21 =
|
|
734
810
|
record {
|
|
735
811
|
items: vec record {
|
|
736
812
|
name: text;
|
|
@@ -740,63 +816,87 @@ type Page_18 =
|
|
|
740
816
|
total: nat;
|
|
741
817
|
withheld: nat;
|
|
742
818
|
};
|
|
743
|
-
type
|
|
819
|
+
type Page_20 =
|
|
744
820
|
record {
|
|
745
821
|
items: vec BackupMetadata;
|
|
746
822
|
total: nat;
|
|
747
823
|
withheld: nat;
|
|
748
824
|
};
|
|
749
|
-
type
|
|
825
|
+
type Page_2 =
|
|
826
|
+
record {
|
|
827
|
+
items: vec RecordNote;
|
|
828
|
+
total: nat;
|
|
829
|
+
withheld: nat;
|
|
830
|
+
};
|
|
831
|
+
type Page_19 =
|
|
750
832
|
record {
|
|
751
833
|
items: vec BearerToken;
|
|
752
834
|
total: nat;
|
|
753
835
|
withheld: nat;
|
|
754
836
|
};
|
|
755
|
-
type
|
|
837
|
+
type Page_18 =
|
|
756
838
|
record {
|
|
757
839
|
items: vec CondenseCheckpointRow;
|
|
758
840
|
total: nat;
|
|
759
841
|
withheld: nat;
|
|
760
842
|
};
|
|
761
|
-
type
|
|
843
|
+
type Page_17 =
|
|
762
844
|
record {
|
|
763
845
|
items: vec CycleSnapshot;
|
|
764
846
|
total: nat;
|
|
765
847
|
withheld: nat;
|
|
766
848
|
};
|
|
767
|
-
type
|
|
849
|
+
type Page_16 =
|
|
768
850
|
record {
|
|
769
851
|
items: vec text;
|
|
770
852
|
total: nat;
|
|
771
853
|
withheld: nat;
|
|
772
854
|
};
|
|
773
|
-
type
|
|
855
|
+
type Page_15 =
|
|
774
856
|
record {
|
|
775
857
|
items: vec Eip712Destination;
|
|
776
858
|
total: nat;
|
|
777
859
|
withheld: nat;
|
|
778
860
|
};
|
|
779
|
-
type
|
|
861
|
+
type Page_14 =
|
|
780
862
|
record {
|
|
781
863
|
items: vec Eip712TypeView;
|
|
782
864
|
total: nat;
|
|
783
865
|
withheld: nat;
|
|
784
866
|
};
|
|
785
|
-
type
|
|
867
|
+
type Page_13 =
|
|
868
|
+
record {
|
|
869
|
+
items: vec GuardianDispute;
|
|
870
|
+
total: nat;
|
|
871
|
+
withheld: nat;
|
|
872
|
+
};
|
|
873
|
+
type Page_12 =
|
|
786
874
|
record {
|
|
787
875
|
items: vec GuardianRecord;
|
|
788
876
|
total: nat;
|
|
789
877
|
withheld: nat;
|
|
790
878
|
};
|
|
879
|
+
type Page_11 =
|
|
880
|
+
record {
|
|
881
|
+
items: vec ExportReceiptRow;
|
|
882
|
+
total: nat;
|
|
883
|
+
withheld: nat;
|
|
884
|
+
};
|
|
885
|
+
type Page_10 =
|
|
886
|
+
record {
|
|
887
|
+
items: vec MemoryFileRow;
|
|
888
|
+
total: nat;
|
|
889
|
+
withheld: nat;
|
|
890
|
+
};
|
|
791
891
|
type Page_1 =
|
|
792
892
|
record {
|
|
793
|
-
items: vec
|
|
893
|
+
items: vec Repudiation;
|
|
794
894
|
total: nat;
|
|
795
895
|
withheld: nat;
|
|
796
896
|
};
|
|
797
897
|
type Page =
|
|
798
898
|
record {
|
|
799
|
-
items: vec
|
|
899
|
+
items: vec SignIn;
|
|
800
900
|
total: nat;
|
|
801
901
|
withheld: nat;
|
|
802
902
|
};
|
|
@@ -968,6 +1068,13 @@ type MemoryHistory =
|
|
|
968
1068
|
retainedCount: nat;
|
|
969
1069
|
versions: vec MemoryVersionSummary;
|
|
970
1070
|
};
|
|
1071
|
+
type MemoryFileRow =
|
|
1072
|
+
record {
|
|
1073
|
+
lastModifiedAtNs: int;
|
|
1074
|
+
lastModifiedBy: opt principal;
|
|
1075
|
+
path: text;
|
|
1076
|
+
version: nat;
|
|
1077
|
+
};
|
|
971
1078
|
type MemoryFile =
|
|
972
1079
|
record {
|
|
973
1080
|
content: blob;
|
|
@@ -1015,7 +1122,7 @@ type LogPage =
|
|
|
1015
1122
|
record {
|
|
1016
1123
|
firstAvailableSeq: nat;
|
|
1017
1124
|
head: blob;
|
|
1018
|
-
page:
|
|
1125
|
+
page: Page_9;
|
|
1019
1126
|
};
|
|
1020
1127
|
type KeyNomination =
|
|
1021
1128
|
record {
|
|
@@ -1079,6 +1186,16 @@ type GuardianPermissions =
|
|
|
1079
1186
|
canRevokeAgents: bool;
|
|
1080
1187
|
scopes: opt vec text;
|
|
1081
1188
|
};
|
|
1189
|
+
type GuardianDispute =
|
|
1190
|
+
record {
|
|
1191
|
+
about: nat;
|
|
1192
|
+
atNs: int;
|
|
1193
|
+
auditId: nat;
|
|
1194
|
+
guardian: principal;
|
|
1195
|
+
path: opt text;
|
|
1196
|
+
reason: text;
|
|
1197
|
+
version: opt nat;
|
|
1198
|
+
};
|
|
1082
1199
|
type GenesisNote =
|
|
1083
1200
|
record {
|
|
1084
1201
|
genesisAtNs: int;
|
|
@@ -1181,10 +1298,17 @@ type Engram =
|
|
|
1181
1298
|
/// nomination names. That check compares the caller inside the module, where
|
|
1182
1299
|
/// test/key-replacement.test.mo runs it; this body names no roster gate, because the caller holds
|
|
1183
1300
|
/// no role here until the move.
|
|
1184
|
-
acceptAgentKeyNomination: (agentKey: principal) -> (
|
|
1301
|
+
acceptAgentKeyNomination: (agentKey: principal) -> (Result_80);
|
|
1185
1302
|
/// Consensus transform for the alert webhook outcall: collapse the response to status-only so
|
|
1186
1303
|
/// replicas agree regardless of response headers/body (we only care that the POST landed 2xx).
|
|
1187
1304
|
///
|
|
1305
|
+
/// ⟨CORRECTED 2026-10-21⟩ No longer a consensus transform: the alert outcall is non-replicated
|
|
1306
|
+
/// (`is_replicated = ?false` in `scanAndPost`), so ONE node sends the POST and runs this on its
|
|
1307
|
+
/// own response — there are no replicas to agree, and "on every replica" below now means "on that
|
|
1308
|
+
/// node". It stays so the response is collapsed to status-only before the engram reads it. The
|
|
1309
|
+
/// PUBLIC reasoning below is unchanged: the outcall protocol still calls it with no caller identity.
|
|
1310
|
+
/// `worldIdTransform` is still a true consensus transform (World ID stays replicated).
|
|
1311
|
+
///
|
|
1188
1312
|
/// PUBLIC: not a choice. The management canister invokes a transform on every replica as part of
|
|
1189
1313
|
/// the HTTP-outcall protocol, and that invocation carries no caller identity to gate on — a gate
|
|
1190
1314
|
/// here would refuse the only caller there is and break every alert this canister sends. Safe
|
|
@@ -1204,7 +1328,7 @@ type Engram =
|
|
|
1204
1328
|
/// and works while frozen; a value is 1–128 characters (an address, or a venue value such as an
|
|
1205
1329
|
/// account name). The action must be registered: a destination list belongs to an action, and a
|
|
1206
1330
|
/// list for no action would be a value nothing checks. The caller is the owner's app.
|
|
1207
|
-
addEip712Destination: (typeId: blob, value: text) -> (
|
|
1331
|
+
addEip712Destination: (typeId: blob, value: text) -> (Result_79);
|
|
1208
1332
|
/// Register a typed-data shape as signable. Owner-only, freeze-gated (a registration is a grant
|
|
1209
1333
|
/// of FUTURE authority — a frozen engram must not be able to widen what it can sign), and the
|
|
1210
1334
|
/// shape is IMMUTABLE: any change mints a new typeId.
|
|
@@ -1244,7 +1368,7 @@ type Engram =
|
|
|
1244
1368
|
};
|
|
1245
1369
|
primaryType: text;
|
|
1246
1370
|
verifyingContract: text;
|
|
1247
|
-
}) -> (
|
|
1371
|
+
}) -> (Result_78);
|
|
1248
1372
|
/// ⟨0.16.0, L1⟩ THE ROLE-CONFLICT ARM, and why three refusals here are not the same refusal.
|
|
1249
1373
|
///
|
|
1250
1374
|
/// This method had five distinct ways to say no through one `text`, and a caller could only tell
|
|
@@ -1255,6 +1379,15 @@ type Engram =
|
|
|
1255
1379
|
/// or the roster is full. Only the last is worth an agent's time to resolve.
|
|
1256
1380
|
addGuardian: (guardianPrincipal: principal, name: text, permissions:
|
|
1257
1381
|
GuardianPermissions) -> (Result_1);
|
|
1382
|
+
/// ⟨2026-10-21, the owner's round-11 answer b⟩ OWNER-ONLY: put a note on any entry of this
|
|
1383
|
+
/// engram's record — words, nothing else. Appends a chained `record.note` entry
|
|
1384
|
+
/// (`about=<id> note=<words>`) and keeps the note for `listRecordNotes`; answers the new entry's
|
|
1385
|
+
/// id. The entry noted may be any entry ever appended (`about` below the head), including one the
|
|
1386
|
+
/// ring no longer holds in full. An agent, a guardian, a stranger and the anonymous caller are
|
|
1387
|
+
/// refused by `requireOwner`'s own words. Empty words, words over `RecordWords.WORDS_MAX` or
|
|
1388
|
+
/// holding a line break are `#Invalid`; an id past the head is `#NotFound`; nothing is recorded
|
|
1389
|
+
/// on any refusal.
|
|
1390
|
+
addRecordNote: (about: nat, note: text) -> (Result_12);
|
|
1258
1391
|
/// Returns the write RECEIPT, not just the version.
|
|
1259
1392
|
///
|
|
1260
1393
|
/// The receipt was always computed and then thrown away: MemoryRouter hands back
|
|
@@ -1286,7 +1419,7 @@ type Engram =
|
|
|
1286
1419
|
/// Gated on requireWritesNotPaused — unlike the export. This one destroys retained entries, which
|
|
1287
1420
|
/// is exactly what a guardian pause exists to hold. No action alert is raised: the operation is
|
|
1288
1421
|
/// owner-initiated, owner-only, and already chained into the audit log.
|
|
1289
|
-
applyCondense: (toSeq: nat) -> (
|
|
1422
|
+
applyCondense: (toSeq: nat) -> (Result_77);
|
|
1290
1423
|
/// Owner-only: activate a guardian who has registered against an invite.
|
|
1291
1424
|
///
|
|
1292
1425
|
/// Until this call the guardian is `#Pending` and can do NOTHING — registering is a claim, this
|
|
@@ -1357,13 +1490,13 @@ type Engram =
|
|
|
1357
1490
|
///
|
|
1358
1491
|
/// The write half also refuses while writes are PAUSED.
|
|
1359
1492
|
backupInit: (dbType: text, backupType: BackupType, parentBackupId:
|
|
1360
|
-
opt text, sha256: text, backupLabel: opt text) -> (
|
|
1493
|
+
opt text, sha256: text, backupLabel: opt text) -> (Result_51);
|
|
1361
1494
|
/// Read one chunk of a finalized backup, by index.
|
|
1362
1495
|
///
|
|
1363
1496
|
/// ⚠ GATED ON `read_backup`, which is NOT the permission the upload half uses — that one is
|
|
1364
1497
|
/// `canAppendMemory`. Holding one says nothing about the other, deliberately: taking a backup and
|
|
1365
1498
|
/// carrying it away are different authorities.
|
|
1366
|
-
backupPullChunk: (backupId: text, chunkIndex: nat) -> (
|
|
1499
|
+
backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_67) query;
|
|
1367
1500
|
backupPushChunk: (backupId: text, chunkIndex: nat, data: blob) ->
|
|
1368
1501
|
(Result_1);
|
|
1369
1502
|
/// The OWNER cancels an agent's pending key nomination; the agent keeps its current key. Refused
|
|
@@ -1415,7 +1548,7 @@ type Engram =
|
|
|
1415
1548
|
/// A principal that is already a GUARDIAN cannot become an agent — a guardian is an
|
|
1416
1549
|
/// independent check on agents, so one wallet must not hold both.
|
|
1417
1550
|
createAgentInvite: (name: text, permissions: AgentPermissions) ->
|
|
1418
|
-
(
|
|
1551
|
+
(Result_51);
|
|
1419
1552
|
/// Owner-only: mint an invite for a GUARDIAN — an independent check on agents, not a
|
|
1420
1553
|
/// co-owner and not a recovery agent.
|
|
1421
1554
|
///
|
|
@@ -1438,7 +1571,7 @@ type Engram =
|
|
|
1438
1571
|
/// So an invite that fails to redeem for that reason is not a bad code. The rule exists because
|
|
1439
1572
|
/// a check must be independent of the thing it checks.
|
|
1440
1573
|
createGuardianInvite: (name: text, permissions: GuardianPermissions) ->
|
|
1441
|
-
(
|
|
1574
|
+
(Result_51);
|
|
1442
1575
|
/// OWNER-ONLY deletion of a stored backup.
|
|
1443
1576
|
///
|
|
1444
1577
|
/// ⚠ NOT THE SAME GATE AS THE REST OF THE FAMILY, and the asymmetry is deliberate: `backupInit`,
|
|
@@ -1466,6 +1599,22 @@ type Engram =
|
|
|
1466
1599
|
/// `#NotFound` for an unknown id and `#Conflict` when the request is no longer pending, and it
|
|
1467
1600
|
/// does not change the policy — the next request over the same limit will be raised again.
|
|
1468
1601
|
denyRequest: (requestId: text, reason: text) -> (Result_1);
|
|
1602
|
+
/// ⟨2026-10-21, the owner's round-11 answer c⟩ A NEW GUARDIAN POWER, words only: an ACTIVE
|
|
1603
|
+
/// guardian disputes an agent's write. It never moves money, stops anything or changes a grant.
|
|
1604
|
+
/// Appends a chained `record.dispute` entry (`about=<id> reason=<words>`) and keeps the dispute
|
|
1605
|
+
/// for `listGuardianDisputes`; answers the new entry's id. NOT ALERTED, deliberately: a
|
|
1606
|
+
/// `guardian.*` operation would fall in the alerts' #guardian class, and which entries reach a
|
|
1607
|
+
/// phone is the held alerts round's to decide (`ActionAlerts.classify` answers null for
|
|
1608
|
+
/// `record.*`). The owner sees it on the record's Disputes tab.
|
|
1609
|
+
///
|
|
1610
|
+
/// WHO: every active guardian — no grant bit (`RecordWords` header says why). The OWNER is refused
|
|
1611
|
+
/// by name (`RecordWords.OWNER_DISPUTES_ELSEWHERE` — the owner's dispute is
|
|
1612
|
+
/// `repudiateMemoryWrite`); an agent and a stranger get "Not a guardian", a pending guardian "Guardian
|
|
1613
|
+
/// is pending approval", the anonymous caller the anonymous refusal.
|
|
1614
|
+
/// WHAT: an entry the owner's review would show (`qualifiesForReview` — an agent's append or
|
|
1615
|
+
/// revision, or a paid session's append) that succeeded, still held in full by the ring.
|
|
1616
|
+
/// One dispute per guardian per write (`#Conflict`, the first stands).
|
|
1617
|
+
disputeAgentWrite: (about: nat, reason: text) -> (Result_12);
|
|
1469
1618
|
/// Record that log entries [fromSeq, toSeq] were served, and return the root that proves it.
|
|
1470
1619
|
///
|
|
1471
1620
|
/// This is the receipt ledgerfs Q2 requires before any of those entries may be condensed away.
|
|
@@ -1479,7 +1628,7 @@ type Engram =
|
|
|
1479
1628
|
/// situation rather than a safety measure. It IS gated on requireMemoryAttached: a store that
|
|
1480
1629
|
/// failed its integrity check must not attest anything it cannot vouch for.
|
|
1481
1630
|
exportMemoryRange: (fromSeq: nat, toSeq: nat, authorFilter:
|
|
1482
|
-
opt principal) -> (
|
|
1631
|
+
opt principal) -> (Result_76);
|
|
1483
1632
|
/// ⟨0.16.0, L2.2 — renamed from `guardianFreezePayments`⟩ The prefix LIED about who may call it.
|
|
1484
1633
|
/// The gate is `requireOwnerOrGuardian`, and an owner freezing their own payments is the ordinary
|
|
1485
1634
|
/// case — the guardian is the exceptional one. A name that says otherwise sends an owner looking
|
|
@@ -1512,8 +1661,16 @@ type Engram =
|
|
|
1512
1661
|
/// ⚠ The three exclusions are a reading of intent, not a ruling: no declaration stated the scope
|
|
1513
1662
|
/// before this one. If any of them is wrong, this comment is where the argument should happen.
|
|
1514
1663
|
freezePayments: () -> (Result_1);
|
|
1664
|
+
/// ⟨2026-10-21, the owner's round-11 answer d⟩ `freezePayments` with a reason the strip and the
|
|
1665
|
+
/// guardian page show ("Sam froze payments: 'a payment I didn't expect'"). A NEW method, not an
|
|
1666
|
+
/// argument on `freezePayments`: a shipped argument tuple is frozen. Same callers, same grant, same
|
|
1667
|
+
/// brake: the owner, or an active guardian holding `canFreezePayments`; an agent, a stranger, a
|
|
1668
|
+
/// pending guardian and the anonymous caller are refused by `requireOwnerOrGuardian`'s own words.
|
|
1669
|
+
/// An empty reason is no reason; a reason too long or holding a line break is `#Invalid` and the
|
|
1670
|
+
/// brake is NOT pulled — the caller pulls it with `freezePayments`, or shortens the words.
|
|
1671
|
+
freezePaymentsWithReason: (reason: text) -> (Result_1);
|
|
1515
1672
|
/// Delivery status + config readback. Owner-only (the URL is a secret).
|
|
1516
|
-
getActionAlertStatus: () -> (
|
|
1673
|
+
getActionAlertStatus: () -> (Result_65) query;
|
|
1517
1674
|
/// Agents need to know what they may revise, so they can read it too. Whole-value config, same
|
|
1518
1675
|
/// carve-out as getProtectedPaths — and kept a SEPARATE method from it deliberately (L2.2): a
|
|
1519
1676
|
/// protected path and a revisable path are opposite grants, and one accessor for both would be a
|
|
@@ -1521,7 +1678,7 @@ type Engram =
|
|
|
1521
1678
|
///
|
|
1522
1679
|
/// Refusal reason preserved from the trap: a grant is a power, and its absence and its
|
|
1523
1680
|
/// concealment are different facts.
|
|
1524
|
-
getAgentRevisablePaths: () -> (
|
|
1681
|
+
getAgentRevisablePaths: () -> (Result_61) query;
|
|
1525
1682
|
/// OWNER-ONLY: every engagement's seat weeks on this engram, with the agent's root — the day it
|
|
1526
1683
|
/// paired, the days of its first and last payment signature, a 64-week map whose bit 0 is the week
|
|
1527
1684
|
/// of the last one, and how many were produced. Never an amount, a recipient or a nonce.
|
|
@@ -1532,7 +1689,7 @@ type Engram =
|
|
|
1532
1689
|
/// order. Anyone else is refused by name (`#Refused getAgentSeatWeeks: …`), never answered with an
|
|
1533
1690
|
/// empty page. Paged; `total` is every engagement ever paired here (a reset keeps the rows).
|
|
1534
1691
|
/// Two rows can name one root: an agent paired again after it left is a second engagement.
|
|
1535
|
-
getAgentSeatWeeks: (start: nat, limit: nat) -> (
|
|
1692
|
+
getAgentSeatWeeks: (start: nat, limit: nat) -> (Result_74) query;
|
|
1536
1693
|
/// Owner: everything written into this engram by someone other than the owner since the last
|
|
1537
1694
|
/// markAgentWritesReviewed() — agent appends/revisions AND paid-session appends (see
|
|
1538
1695
|
/// qualifiesForReview for why those two families are recognised differently).
|
|
@@ -1540,7 +1697,7 @@ type Engram =
|
|
|
1540
1697
|
/// them — the UI must page (markAgentWritesReviewed(?lastShownId)) and must NOT present 200
|
|
1541
1698
|
/// as a total. `earliest` discloses ring eviction — if cursor < earliest, entries between them
|
|
1542
1699
|
/// aged out of the ring (the CHAIN still proves total count; this view can't show their bodies).
|
|
1543
|
-
getAgentWriteReview: () -> (
|
|
1700
|
+
getAgentWriteReview: () -> (Result_73) query;
|
|
1544
1701
|
/// Why anchoring is or is not advancing. PUBLIC: ungated on purpose — detecting a stalled
|
|
1545
1702
|
/// engram is the point, a gated read would fail-to-empty and hand a third party fabricated zeros,
|
|
1546
1703
|
/// and none of these fields is a secret — `total` is already public via getCertifiedAuditHead.
|
|
@@ -1559,7 +1716,18 @@ type Engram =
|
|
|
1559
1716
|
/// below serves the same head WITH the subnet certificate for a caller that needs to verify it
|
|
1560
1717
|
/// was signed rather than asserted.
|
|
1561
1718
|
getAuditHead: () -> (AuditHead) query;
|
|
1562
|
-
getBackupMetadata: (backupId: text) -> (
|
|
1719
|
+
getBackupMetadata: (backupId: text) -> (Result_72) query;
|
|
1720
|
+
/// ⟨2026-10-21, the owner's round-11 answer m: a backup-retention getter⟩ How many backups of
|
|
1721
|
+
/// `dbType` each creator keeps, and whether that is the default — the read `setBackupRetention`
|
|
1722
|
+
/// lacked, so "Keeps your newest 3" showed only on the phone that last set it.
|
|
1723
|
+
///
|
|
1724
|
+
/// WHO: the OWNER, and an active AGENT holding `canAppendMemory` — the permission that lets it
|
|
1725
|
+
/// upload backups, which are exactly the backups this number bounds (`#perm(#append_memory)`).
|
|
1726
|
+
/// Refused, each by the gate's own words: an agent without that permission ("Permission
|
|
1727
|
+
/// denied"), a revoked or resigned agent, a guardian (guardians take no backups), a stranger and
|
|
1728
|
+
/// the anonymous caller. A kind the setter would refuse is `#Invalid` here too
|
|
1729
|
+
/// (`Backup.getRetention`). Records nothing (a query).
|
|
1730
|
+
getBackupRetention: (dbType: text) -> (Result_71) query;
|
|
1563
1731
|
/// The cashier this engram recognises as its rent biller — `null` until the registry pushes one.
|
|
1564
1732
|
///
|
|
1565
1733
|
/// PUBLIC: a payer about to send money needs to know which cashier this engram will accept credit
|
|
@@ -1567,6 +1735,15 @@ type Engram =
|
|
|
1567
1735
|
/// never become rent. The registry publishes the same fact as `getRentBiller`; publishing it here
|
|
1568
1736
|
/// too is what lets the two be COMPARED, which is the only way to catch a mismatch.
|
|
1569
1737
|
getBillerId: () -> (opt principal) query;
|
|
1738
|
+
/// ⟨2026-10-21, the owner's round-11 answer d⟩ Each brake: on or off, and while on, who pulled it
|
|
1739
|
+
/// LAST (their key and whether as owner or guardian), since when, and the reason they gave — the
|
|
1740
|
+
/// same person and time as the newest brake entry on the record (`RecordWords.BrakePull`). For the
|
|
1741
|
+
/// owner's status strip and the guardian page. The OWNER and ACTIVE GUARDIANS may read it; an
|
|
1742
|
+
/// agent, a stranger, a pending guardian and the anonymous caller are refused (`#ownerOrGuardian`
|
|
1743
|
+
/// — an agent learns a brake is on from the refusal of what it tried, and needs no more). `pull`
|
|
1744
|
+
/// is null for a brake that is off, and for one carried on across the upgrade that added this
|
|
1745
|
+
/// read (who pulled it was not recorded then) — never a guessed pull.
|
|
1746
|
+
getBrakes: () -> (Result_70) query;
|
|
1570
1747
|
/// ⟨0.16.0, L9/L10 — census row⟩ `Wire.CertifiedAuditHead`, not an anonymous record. The
|
|
1571
1748
|
/// registry, market and cashier already served the shared type; the engram — the canister that
|
|
1572
1749
|
/// IS the evidence product — was the one chain still answering in a shape of its own, missing
|
|
@@ -1589,11 +1766,11 @@ type Engram =
|
|
|
1589
1766
|
/// query's state writes are discarded when it returns, and the `denied` call first written here
|
|
1590
1767
|
/// recorded nothing while reading as if it did. The refusal is loud in the reply instead. WHAT
|
|
1591
1768
|
/// WOULD MAKE THIS WRONG: a reason to record who asked — then this becomes an update that says so.
|
|
1592
|
-
getChildAllowance: (agentPrincipal: principal) -> (
|
|
1769
|
+
getChildAllowance: (agentPrincipal: principal) -> (Result_69) query;
|
|
1593
1770
|
/// Owner-only, Billing-class: what opening an engram costs this engram, the balance below which an
|
|
1594
1771
|
/// agent's request is refused, the balance now, and every agent's allowance. The console's cost
|
|
1595
1772
|
/// sentence reads it. Cycles are owner-class information, as on the owner's console read.
|
|
1596
|
-
getChildOpening: () -> (
|
|
1773
|
+
getChildOpening: () -> (Result_68) query;
|
|
1597
1774
|
/// Derive the shared memory-encryption key, encrypted under the caller's transport
|
|
1598
1775
|
/// public key. Gated to owner + read-agents (the same principals allowed to read
|
|
1599
1776
|
/// memory). The client decrypts it locally with its transport secret key.
|
|
@@ -1618,7 +1795,7 @@ type Engram =
|
|
|
1618
1795
|
/// cost. Stated here because L7 requires the reason be readable from the interface rather than
|
|
1619
1796
|
/// inferred by opening the body — which is exactly what had to happen to write this line.
|
|
1620
1797
|
getEncryptedMemoryKey: (epoch: opt nat, transportPublicKey: blob) ->
|
|
1621
|
-
(
|
|
1798
|
+
(Result_67);
|
|
1622
1799
|
/// ⟨0.16.0, owner ruling 2026-08-20 — option (a)⟩ `x402Support` REPORTS THE RAIL, not a constant.
|
|
1623
1800
|
///
|
|
1624
1801
|
/// The card's config hardcodes `x402Support = true`, answering a buyer's question with a fact
|
|
@@ -1713,7 +1890,7 @@ type Engram =
|
|
|
1713
1890
|
/// It refuses rather than half-answers: if either address cannot be derived the reply is
|
|
1714
1891
|
/// `#Err`, never a record carrying an empty string (ic402's `getEvmAddress` answers `""` on a
|
|
1715
1892
|
/// failed derivation — that is fail-to-empty on a money surface, and it stops here).
|
|
1716
|
-
getEvmAddress: () -> (
|
|
1893
|
+
getEvmAddress: () -> (Result_66);
|
|
1717
1894
|
/// The owner's OWN EVM address, if they registered one — distinct from `getEvmAddress`, which is
|
|
1718
1895
|
/// the address this canister derives for itself.
|
|
1719
1896
|
///
|
|
@@ -1728,7 +1905,7 @@ type Engram =
|
|
|
1728
1905
|
/// the management canister's `ecdsa_public_key`. A query cannot await, so the round-trip is the
|
|
1729
1906
|
/// cost — stated here because L7 requires the reason be readable from the interface rather than
|
|
1730
1907
|
/// inferred by opening the body.
|
|
1731
|
-
getEvmSignerAddress: () -> (
|
|
1908
|
+
getEvmSignerAddress: () -> (Result_51);
|
|
1732
1909
|
/// PUBLIC: where this chain begins, for the stranger deciding whether to trust it.
|
|
1733
1910
|
///
|
|
1734
1911
|
/// The fourth of the four evidence methods (`getAuditHead`, `getCertifiedAuditHead`,
|
|
@@ -1737,7 +1914,7 @@ type Engram =
|
|
|
1737
1914
|
/// cannot verify it, and nothing here identifies anybody.
|
|
1738
1915
|
getGenesisNote: () -> (GenesisNote) query;
|
|
1739
1916
|
/// A guardian's own channel status (their URL is their secret — each guardian sees only theirs).
|
|
1740
|
-
getGuardianAlertStatus: () -> (
|
|
1917
|
+
getGuardianAlertStatus: () -> (Result_65) query;
|
|
1741
1918
|
/// The market this engram will accept signing requests from — `null` until the registry pushes
|
|
1742
1919
|
/// one at spawn, which is why `requireMarket` refuses fleet-wide today.
|
|
1743
1920
|
///
|
|
@@ -1767,7 +1944,7 @@ type Engram =
|
|
|
1767
1944
|
/// never renumbered: the next page starts at the last version returned plus one. Defaults
|
|
1768
1945
|
/// return the whole history of any file a pre-FD engram could have held.
|
|
1769
1946
|
getMemoryHistory: (path: text, start: opt nat, max: opt nat) ->
|
|
1770
|
-
(
|
|
1947
|
+
(Result_64) query;
|
|
1771
1948
|
/// PUBLIC: the epoch alone, and deliberately nothing else (rotation study D4). A `rotatedAt[]`
|
|
1772
1949
|
/// history would be a public, fleet-enumerable feed of when each owner terminated a trust
|
|
1773
1950
|
/// relationship — readable by, among others, the party just terminated.
|
|
@@ -1808,7 +1985,7 @@ type Engram =
|
|
|
1808
1985
|
/// Refusal reasons of both merge: an empty policy reads as "nothing is capped, every version kept
|
|
1809
1986
|
/// forever" — a claim about what this engram will DESTROY — and an empty guard list reads as
|
|
1810
1987
|
/// "nothing is held back".
|
|
1811
|
-
getMemoryRetentionPolicy: () -> (
|
|
1988
|
+
getMemoryRetentionPolicy: () -> (Result_63) query;
|
|
1812
1989
|
/// The metrics reader this engram answers — `null` until the spawning registry names one.
|
|
1813
1990
|
///
|
|
1814
1991
|
/// PUBLIC: an owner deciding whether to switch the read off needs to know who it is, and anyone
|
|
@@ -1831,7 +2008,7 @@ type Engram =
|
|
|
1831
2008
|
/// was `nat`, then widened to `opt nat` so a refusal could be `null`, which broke every published
|
|
1832
2009
|
/// client (rule 4) and bought a masked answer nobody had asked for — the census could not even
|
|
1833
2010
|
/// find a consumer that read the masked `0`. Behind a gate there is nobody to mask it from.
|
|
1834
|
-
getOwnerConsole: () -> (
|
|
2011
|
+
getOwnerConsole: () -> (Result_62) query;
|
|
1835
2012
|
/// Owner + agents only (agents need it to avoid writing protected paths).
|
|
1836
2013
|
///
|
|
1837
2014
|
/// A NAMED RECORD, not a Page: the setter replaces this list wholesale, so there is no window to
|
|
@@ -1843,7 +2020,7 @@ type Engram =
|
|
|
1843
2020
|
/// path on this engram is protected", and an agent consults this list precisely to avoid
|
|
1844
2021
|
/// writing one — so a fabricated empty here does not merely misinform, it invites the write the
|
|
1845
2022
|
/// list exists to prevent.
|
|
1846
|
-
getProtectedPaths: () -> (
|
|
2023
|
+
getProtectedPaths: () -> (Result_61) query;
|
|
1847
2024
|
/// Whether the metrics reader's read is answered — `true` from birth.
|
|
1848
2025
|
///
|
|
1849
2026
|
/// PUBLIC: the promise that an owner can switch this read off can be checked only if the switch
|
|
@@ -1852,7 +2029,7 @@ type Engram =
|
|
|
1852
2029
|
/// Owner-only, Billing-class: the signing floor, the balance, one signature's price, and how many
|
|
1853
2030
|
/// payment signatures the balance carries above the floor before `signX402Payment` is refused by
|
|
1854
2031
|
/// name. The same numbers the check uses, so Billing can say only what the engram enforces.
|
|
1855
|
-
getSigningFloor: () -> (
|
|
2032
|
+
getSigningFloor: () -> (Result_60) query;
|
|
1856
2033
|
/// The registry that spawned this engram, if it recorded one.
|
|
1857
2034
|
///
|
|
1858
2035
|
/// PUBLIC: it is the provenance claim. An engram asserting it is part of a fleet, under that
|
|
@@ -1869,7 +2046,7 @@ type Engram =
|
|
|
1869
2046
|
/// configuration, and the engram-wide total would also tell one agent how much the others spent.
|
|
1870
2047
|
/// A refusal names this method (`Gated.gatedResult`) rather than answering null/0 — a ceiling of
|
|
1871
2048
|
/// "none" and a spend of 0 are both real answers, so a fabricated one would be read as fact.
|
|
1872
|
-
getSpendCeiling: () -> (
|
|
2049
|
+
getSpendCeiling: () -> (Result_59) query;
|
|
1873
2050
|
/// Read the caps in force for a caller.
|
|
1874
2051
|
///
|
|
1875
2052
|
/// OWNER-ONLY, and this is where it diverges from the market's inbound twin, which is public.
|
|
@@ -1877,8 +2054,8 @@ type Engram =
|
|
|
1877
2054
|
/// Here the engram serves no 402s at all: these caps are the owner's private custody
|
|
1878
2055
|
/// configuration, and publishing them would tell any caller exactly how large a signing request
|
|
1879
2056
|
/// can be before it needs an approval nobody is watching for.
|
|
1880
|
-
getSpendPolicy: (caller: opt principal) -> (
|
|
1881
|
-
getStorageStats: () -> (
|
|
2057
|
+
getSpendPolicy: (caller: opt principal) -> (Result_58) query;
|
|
2058
|
+
getStorageStats: () -> (Result_57) query;
|
|
1882
2059
|
/// Timer arm-state. PUBLIC and deliberately so: these timers are self-arming to save cycles,
|
|
1883
2060
|
/// and an optimisation nobody can verify is an optimisation nobody should trust. Cheap to read,
|
|
1884
2061
|
/// leaks nothing (booleans about our own scheduling).
|
|
@@ -1949,12 +2126,12 @@ type Engram =
|
|
|
1949
2126
|
/// ⟨L7⟩ MARKER ADDED 2026-08-23, reasoning above UNCHANGED — this block already said "Stays an
|
|
1950
2127
|
/// UPDATE, marked per L7: it awaits three ICRC-1 ledgers". It was marked in prose and invisible
|
|
1951
2128
|
/// to any gate; the glyph is what `scripts/check-update-for-read.mjs` matches.
|
|
1952
|
-
getWalletBalances: () -> (
|
|
2129
|
+
getWalletBalances: () -> (Result_56);
|
|
1953
2130
|
/// Refusal reason preserved, and it is the clearest case of why a masked read is worse than no
|
|
1954
2131
|
/// read: three empty strings with `configured = false` is a VALID-LOOKING answer meaning "this
|
|
1955
2132
|
/// engram has no World ID configuration" — handed to a caller who merely lacks a grant. The
|
|
1956
2133
|
/// fabrication is indistinguishable from the truth by construction.
|
|
1957
|
-
getWorldIdConfig: () -> (
|
|
2134
|
+
getWorldIdConfig: () -> (Result_55) query;
|
|
1958
2135
|
/// ⟨L7⟩ UPDATE, NOT QUERY: this awaits THREE system calls — `raw_rand()` for the nonce,
|
|
1959
2136
|
/// `Call.signWithEcdsa` for the signature, and `worldIdRpPublicKey()` for the derived key. A
|
|
1960
2137
|
/// query can do none of them.
|
|
@@ -1963,7 +2140,7 @@ type Engram =
|
|
|
1963
2140
|
/// Valid iff the derived signer address (getWorldIdRpSignerAddress) is registered for this rp_id in
|
|
1964
2141
|
/// the World Developer Portal. Short-lived (300s TTL, idkit-server's default) and single-purpose —
|
|
1965
2142
|
/// it authorizes opening one verification request, nothing else.
|
|
1966
|
-
getWorldIdRpContext: () -> (
|
|
2143
|
+
getWorldIdRpContext: () -> (Result_54);
|
|
1967
2144
|
/// Owner-only: the EVM address derived from the engram's dedicated World ID RP signing key (the
|
|
1968
2145
|
/// "worldid-rp" tECDSA path). Register THIS address as the rp_id's signer in the World Developer
|
|
1969
2146
|
/// Portal — the engram never holds or exports a private key (only threshold shares exist, on the
|
|
@@ -1973,7 +2150,7 @@ type Engram =
|
|
|
1973
2150
|
/// awaits `worldIdRpPublicKey()` (management `ecdsa_public_key`), and it calls `denied()` on
|
|
1974
2151
|
/// refusal — a state write, which a query cannot perform. So even if the key were cached this
|
|
1975
2152
|
/// could not become a query without silently retiring its denial record (ADR-0002's class).
|
|
1976
|
-
getWorldIdRpSignerAddress: () -> (
|
|
2153
|
+
getWorldIdRpSignerAddress: () -> (Result_51);
|
|
1977
2154
|
/// The verified IDKitResult, verbatim, as World's /api/v4/verify accepted it — the re-checkable
|
|
1978
2155
|
/// artifact behind verifiedHuman. Role-gated because it carries the NULLIFIER.
|
|
1979
2156
|
/// `Result<opt Text>` — and the double wrapper is the entire point, not redundancy.
|
|
@@ -1992,7 +2169,7 @@ type Engram =
|
|
|
1992
2169
|
/// `///`, so the dead name was PUBLISHED in engram.did and pointed every client at a method the
|
|
1993
2170
|
/// canister does not serve. The tombstones below and at `about()` are historical and correct as
|
|
1994
2171
|
/// written; this one was present tense, which is the difference that matters.⟩
|
|
1995
|
-
getWorldIdVerification: () -> (
|
|
2172
|
+
getWorldIdVerification: () -> (Result_53) query;
|
|
1996
2173
|
/// ⟨0.16.0, L1⟩ THE EMERGENCY FAMILY. Every refusal below is `#Refused` or `#NotFound`, and the
|
|
1997
2174
|
/// absence of a `#Conflict` here is the point: these are the calls someone makes while something
|
|
1998
2175
|
/// is going wrong, and the only two answers that help are "you may not do this" and "there is
|
|
@@ -2067,7 +2244,7 @@ type Engram =
|
|
|
2067
2244
|
///
|
|
2068
2245
|
/// Owner-gated because it reports on custody posture, and answered as a Result so that a
|
|
2069
2246
|
/// wrong-identity caller gets a refusal rather than a bare `false` that reads as "no address yet".
|
|
2070
|
-
isEvmAddressCached: () -> (
|
|
2247
|
+
isEvmAddressCached: () -> (Result_52) query;
|
|
2071
2248
|
/// Issue an OAuth authorization code. Called by an OAuth client's sign-in bridge
|
|
2072
2249
|
/// (an `/auth/connector`-style route) after II authentication. The client then
|
|
2073
2250
|
/// redirects the user's browser to `redirectUri` with `?code=<this>` so the
|
|
@@ -2075,7 +2252,7 @@ type Engram =
|
|
|
2075
2252
|
///
|
|
2076
2253
|
/// Owner-only: only the engram owner can authorize a Connector install.
|
|
2077
2254
|
issueAuthCode: (redirectUri: text, scope: text, codeChallenge: text,
|
|
2078
|
-
clientId: opt text) -> (
|
|
2255
|
+
clientId: opt text) -> (Result_51);
|
|
2079
2256
|
/// ⟨0.16.0⟩ `getCycleSnapshotSource` DELETED — folded into `CycleSnapshot.source`, one label per
|
|
2080
2257
|
/// ROW. A single label for a whole ring misattributes every row recorded under the other source,
|
|
2081
2258
|
/// and the source flips by design (self-call first, balance on fallback). Its documentation of
|
|
@@ -2089,7 +2266,24 @@ type Engram =
|
|
|
2089
2266
|
/// Refusal reason preserved, and it is the sharpest of this family: a masked `[]` reads as a
|
|
2090
2267
|
/// DORMANT engram and corrupts retention math — a fabricated empty here does not just misinform a
|
|
2091
2268
|
/// reader, it feeds a wrong number into a decision about destroying data.
|
|
2092
|
-
listActivitySnapshots: (start: nat, limit: nat) -> (
|
|
2269
|
+
listActivitySnapshots: (start: nat, limit: nat) -> (Result_50) query;
|
|
2270
|
+
/// ⟨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,
|
|
2271
|
+
/// m."⟩ OWNER-ONLY: what each agent has spent today, beside the daily limit in force for it, so the
|
|
2272
|
+
/// agent rows can say "$0.50 of $5.00 today" where they said a count of payments. Read from the
|
|
2273
|
+
/// state the payment path already keeps — `outboundSpendToday`, through `SpendCeiling.callerSpentOn`
|
|
2274
|
+
/// (the reader `x402SignFor` uses) — and the limits from `gate.getPolicy(<the agent's key>)`, the
|
|
2275
|
+
/// policy `x402SignFor` checks, on the UTC day it checks (`SpendCeiling.dayIndex`). Amounts are the
|
|
2276
|
+
/// token's minor units, as the record's `amount=` writes them. No new state.
|
|
2277
|
+
///
|
|
2278
|
+
/// OWNER-ONLY for `getSpendCeiling`'s reason: one agent's spending is the owner's custody
|
|
2279
|
+
/// information, and would tell another agent how much it spent. Everyone else — an agent, a
|
|
2280
|
+
/// guardian, a stranger, the anonymous caller — is refused by name (`#Refused
|
|
2281
|
+
/// listAgentSpendToday: …`), never answered with zeros. Paged like `listAgents`, in its order, one
|
|
2282
|
+
/// row per agent record; a row's `spentToday` is null, not 0, where no daily limit is in force,
|
|
2283
|
+
/// because the payment path keeps no figure then (`SpendCeiling.AgentSpendRow` says why).
|
|
2284
|
+
/// WHAT WOULD MAKE THIS WRONG: `x402SignFor` keeping the per-caller total by something other than
|
|
2285
|
+
/// the calling key, or under another day boundary.
|
|
2286
|
+
listAgentSpendToday: (start: nat, limit: nat) -> (Result_49) query;
|
|
2093
2287
|
/// ⟨0.16.0⟩ THE PAGE EXEMPLAR. Trap → `#Refused`, bare array → `Result<Page<T>>` (L1 + L3).
|
|
2094
2288
|
///
|
|
2095
2289
|
/// The refusal prose that used to be `gatedTrap`'s `whyNotEmpty` argument is not lost — it is why
|
|
@@ -2104,7 +2298,7 @@ type Engram =
|
|
|
2104
2298
|
///
|
|
2105
2299
|
/// `withheld` is 0: this roster is owner-only in whole, so there is no partial-visibility case.
|
|
2106
2300
|
/// A method that filters rows by caller sets it — see L1's row-level honesty rule.
|
|
2107
|
-
listAgents: (start: nat, limit: nat) -> (
|
|
2301
|
+
listAgents: (start: nat, limit: nat) -> (Result_48) query;
|
|
2108
2302
|
/// The GUARDIAN-audience projection of the agent roster — three fields, not the full record.
|
|
2109
2303
|
///
|
|
2110
2304
|
/// Two audiences, two methods (L1/L8), rather than one method masking fields by caller: a
|
|
@@ -2116,7 +2310,7 @@ type Engram =
|
|
|
2116
2310
|
/// Refusal reason preserved: `[]` reads as "this engram has no agents", and this is the list a
|
|
2117
2311
|
/// guardian consults BEFORE REVOKING ONE. A fabricated empty here does not merely misinform —
|
|
2118
2312
|
/// it tells someone acting under emergency powers that there is nothing to act on.
|
|
2119
|
-
listAgentsForGuardian: (start: nat, limit: nat) -> (
|
|
2313
|
+
listAgentsForGuardian: (start: nat, limit: nat) -> (Result_47) query;
|
|
2120
2314
|
/// Owner-only: rows carry caller, amount, operation and free-text rationale. The SDK omits it.
|
|
2121
2315
|
///
|
|
2122
2316
|
/// The optional leading filter SURVIVES the L3 reshape — ratified (census tier-2 #8) rather than
|
|
@@ -2129,7 +2323,7 @@ type Engram =
|
|
|
2129
2323
|
///
|
|
2130
2324
|
/// Refusal reason preserved: `[]` reads as "nothing is awaiting the owner's decision".
|
|
2131
2325
|
listApprovalRequests: (statusFilter: opt ApprovalStatus, start: nat,
|
|
2132
|
-
limit: nat) -> (
|
|
2326
|
+
limit: nat) -> (Result_33) query;
|
|
2133
2327
|
/// ⟨0.16.0⟩ `total` IS THE HEAD COUNTER, and on this method that is the entire point.
|
|
2134
2328
|
///
|
|
2135
2329
|
/// The audit log is a bounded RING: it trims its tail, so "rows you can read" and "entries that
|
|
@@ -2163,7 +2357,7 @@ type Engram =
|
|
|
2163
2357
|
/// where this record switched to the hash-first rule. A sealed row costs one SHA-256 of its body
|
|
2164
2358
|
/// at read time; nothing new is stored. WHAT WOULD MAKE THIS WRONG: a sealed row carrying any part
|
|
2165
2359
|
/// of a body, or a stranger reaching `items` (test/record-view.test.mo pins both).
|
|
2166
|
-
listAuditEntries: (start: nat, limit: nat) -> (
|
|
2360
|
+
listAuditEntries: (start: nat, limit: nat) -> (Result_46) query;
|
|
2167
2361
|
/// ⟨0.16.0, L1 + L3 — census-ruled⟩ THE TWO-MECHANISM EXCEPTION DISSOLVES.
|
|
2168
2362
|
///
|
|
2169
2363
|
/// This method used to answer THREE ways to one question: a list, an `#Err` text, and a trap,
|
|
@@ -2187,7 +2381,7 @@ type Engram =
|
|
|
2187
2381
|
/// `dbTypeFilter` DIES on the wire (census). The capability does not: `EngramClient.listBackups`
|
|
2188
2382
|
/// keeps its optional filter and applies it to the page, so no caller loses the ability to ask
|
|
2189
2383
|
/// "backups of this database" — it stops being a thing the canister has to page around.
|
|
2190
|
-
listBackups: (start: nat, limit: nat) -> (
|
|
2384
|
+
listBackups: (start: nat, limit: nat) -> (Result_45) query;
|
|
2191
2385
|
/// List all bearer tokens — Active, Revoked, and Expired. Owner uses this in
|
|
2192
2386
|
/// the dashboard to show installed Connectors (claude.ai, Claude Desktop, etc.).
|
|
2193
2387
|
/// Refusal reason preserved from the trap: `[]` reads as "no connector is installed on this
|
|
@@ -2197,7 +2391,7 @@ type Engram =
|
|
|
2197
2391
|
/// `bearerTokenStore.list()` already resolves each token's status at read time (a token that
|
|
2198
2392
|
/// merely stopped being used is reported `#Expired`, not a stale `#Active`), so the page carries
|
|
2199
2393
|
/// the same honesty the store gained on 2026-08-17.
|
|
2200
|
-
listBearerTokens: (start: nat, limit: nat) -> (
|
|
2394
|
+
listBearerTokens: (start: nat, limit: nat) -> (Result_44) query;
|
|
2201
2395
|
/// The condense checkpoints in the retained log at or above `startSeq`, oldest first.
|
|
2202
2396
|
///
|
|
2203
2397
|
/// ⟨0.16.0, NEW⟩ The other half of the split above. A checkpoint is the only surviving record of a
|
|
@@ -2207,18 +2401,18 @@ type Engram =
|
|
|
2207
2401
|
///
|
|
2208
2402
|
/// Owner-only like every other archive surface, and for the same structural reason: these rows
|
|
2209
2403
|
/// carry the chain positions and roots of entries whose paths were inside the hash preimage.
|
|
2210
|
-
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (
|
|
2404
|
+
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (Result_43) query;
|
|
2211
2405
|
/// ⟨0.16.0⟩ `metrics()` DELETED — absorbed by `about()`.
|
|
2212
2406
|
///
|
|
2213
2407
|
/// Two public projections of one canister (L2.2): `metrics()` and `status()` both answered "what
|
|
2214
2408
|
/// is this engram like" and disagreed on which counters they carried, so a consumer had to fetch
|
|
2215
2409
|
/// both and know which one owned each field. Every field here survives on `about()`, day-flooring
|
|
2216
2410
|
/// included.
|
|
2217
|
-
listCycleSnapshots: (start: nat, limit: nat) -> (
|
|
2411
|
+
listCycleSnapshots: (start: nat, limit: nat) -> (Result_42) query;
|
|
2218
2412
|
/// Same `withheld` treatment as listMemoryFiles — the tombstone listing filtered reserved paths
|
|
2219
2413
|
/// for non-owners just as silently, and a caller could not tell a filtered tombstone list from a
|
|
2220
2414
|
/// complete one. Counted before slicing, so policy-hidden rows never blur into paging.
|
|
2221
|
-
listDeletedMemoryFiles: (start: nat, limit: nat) -> (
|
|
2415
|
+
listDeletedMemoryFiles: (start: nat, limit: nat) -> (Result_41) query;
|
|
2222
2416
|
/// Stays on the engram under B1 (hybrid): withdrawal custody does not leave.
|
|
2223
2417
|
///
|
|
2224
2418
|
/// NAMED item, not a `(Text, Int)` tuple. The Int is an activation time, and a bare Int beside a
|
|
@@ -2233,7 +2427,7 @@ type Engram =
|
|
|
2233
2427
|
/// The item's field is `value`, not `address`: a list may hold a venue value that is no address.
|
|
2234
2428
|
/// Readable by the owner, an active agent or an active guardian, as the old list was.
|
|
2235
2429
|
listEip712Destinations: (typeId: blob, start: nat, limit: nat) ->
|
|
2236
|
-
(
|
|
2430
|
+
(Result_40) query;
|
|
2237
2431
|
/// The registered shapes — E3: encodeTypeString is the display artifact, verbatim.
|
|
2238
2432
|
/// Stays on the engram under B1 (hybrid): EIP-712 signing is custody, and custody does not leave.
|
|
2239
2433
|
///
|
|
@@ -2244,14 +2438,20 @@ type Engram =
|
|
|
2244
2438
|
/// ⟨2026-10-14, the owner's ruling 3A⟩ Each row carries its per-field rules (`fieldRules`), joined in
|
|
2245
2439
|
/// from `eip712FieldRules` — they are part of what the type authorises, so a reader of the list must
|
|
2246
2440
|
/// not have to make a second call to learn them. The row type is `Eip712TypeView`.
|
|
2247
|
-
listEip712Types: (start: nat, limit: nat) -> (
|
|
2441
|
+
listEip712Types: (start: nat, limit: nat) -> (Result_39) query;
|
|
2442
|
+
/// ⟨2026-10-21, round 11 c⟩ Guardians' disputes, oldest first. Same visibility as
|
|
2443
|
+
/// `listRepudiations` and `listRecordNotes`: the owner and ACTIVE guardians read the rows; an
|
|
2444
|
+
/// agent gets an empty page whose `withheld` counts them (ruling 16 B holds — a dispute is the
|
|
2445
|
+
/// guardian's entry, not the agent's); a stranger, a pending guardian and the anonymous caller are
|
|
2446
|
+
/// refused.
|
|
2447
|
+
listGuardianDisputes: (start: nat, limit: nat) -> (Result_38) query;
|
|
2248
2448
|
/// Accessible by owner and guardians.
|
|
2249
2449
|
///
|
|
2250
2450
|
/// Refusal reason carried over from the trap, because it is the sharpest example of why this
|
|
2251
2451
|
/// surface may not fail soft: `[]` reads as "this engram has nobody who can freeze payments or
|
|
2252
2452
|
/// pause writes" — a claim about who can STOP it. A caller who cannot tell that from "you may not
|
|
2253
2453
|
/// see the roster" has been told the engram is unguarded when it may be fully guarded.
|
|
2254
|
-
listGuardians: (start: nat, limit: nat) -> (
|
|
2454
|
+
listGuardians: (start: nat, limit: nat) -> (Result_37) query;
|
|
2255
2455
|
/// The export receipts in the retained log at or above `startSeq`, oldest first.
|
|
2256
2456
|
///
|
|
2257
2457
|
/// ⟨0.16.0, L3⟩ ONE LIST, ONE QUESTION. This method used to return receipts AND checkpoints
|
|
@@ -2267,7 +2467,7 @@ type Engram =
|
|
|
2267
2467
|
///
|
|
2268
2468
|
/// Read `MemoryRouter.ReceiptPage` before reading `page.total` as a receipt count. It is not one;
|
|
2269
2469
|
/// it is the chain's length, and the declaration says why.
|
|
2270
|
-
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (
|
|
2470
|
+
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (Result_36) query;
|
|
2271
2471
|
/// ⟨0.16.0⟩ THE `withheld` EXEMPLAR — L1 names this exact method as the defect it fixes.
|
|
2272
2472
|
///
|
|
2273
2473
|
/// A non-owner's answer silently dropped every `config/` and `secrets/` row. Not "refused the
|
|
@@ -2283,7 +2483,16 @@ type Engram =
|
|
|
2283
2483
|
/// Note the count is computed from the unfiltered list before slicing, so it reports rows hidden
|
|
2284
2484
|
/// by POLICY, never rows merely off the end of this page — those are `total`'s job. Conflating
|
|
2285
2485
|
/// the two would rebuild the ambiguity in a new place.
|
|
2286
|
-
|
|
2486
|
+
///
|
|
2487
|
+
/// ⟨2026-10-21, the owner's round-11 answer k: an author on every file row⟩ Each row also
|
|
2488
|
+
/// carries `lastModifiedBy` (`Types.MemoryFileRow`): the key that wrote the file's current
|
|
2489
|
+
/// version, so a phone's file list can say "changed 2 h ago by Recorder" without a read per
|
|
2490
|
+
/// file. It is what `readMemory` already serves to the same callers under the same gate, so it
|
|
2491
|
+
/// tells no caller anything it could not read. Born `opt` (ADR-0018 rule 1). Looked up only for
|
|
2492
|
+
/// the rows of THIS page (`MemoryRouter.info`), after the slice, so the cost is one lookup per
|
|
2493
|
+
/// row served, never one per file stored. A WIDENED REPLY: a reader that decodes the row by
|
|
2494
|
+
/// position rather than by field name breaks — none in this repository does.
|
|
2495
|
+
listMemoryFiles: (start: nat, limit: nat) -> (Result_35) query;
|
|
2287
2496
|
/// One page of the memory log, seq-ordered, optionally narrowed to one author.
|
|
2288
2497
|
///
|
|
2289
2498
|
/// THE WINDOW IS THE CURSOR, and the page now states it. The window is
|
|
@@ -2309,7 +2518,7 @@ type Engram =
|
|
|
2309
2518
|
/// with the disclosures that make the page verifiable — the hidden-bound defect the census itself
|
|
2310
2519
|
/// names on previewCondense's row.
|
|
2311
2520
|
listMemoryLog: (startSeq: nat, max: nat, authorFilter: opt principal) ->
|
|
2312
|
-
(
|
|
2521
|
+
(Result_34) query;
|
|
2313
2522
|
/// The caller's OWN spend-approval requests. ⟨0.16.0, L1 + L3 — fixed 2026-08-18⟩
|
|
2314
2523
|
///
|
|
2315
2524
|
/// Two defects in seven lines, and the first is the one this release exists to remove:
|
|
@@ -2326,7 +2535,7 @@ type Engram =
|
|
|
2326
2535
|
/// to see, so `total` over their own rows is the honest count and nothing is hidden FROM them.
|
|
2327
2536
|
/// (The unbounded MAP is filed separately — pruning an approval record destroys evidence of what
|
|
2328
2537
|
/// was asked, which is a retention ruling rather than a shape fix.)
|
|
2329
|
-
listMyApprovalRequests: (start: nat, limit: nat) -> (
|
|
2538
|
+
listMyApprovalRequests: (start: nat, limit: nat) -> (Result_33) query;
|
|
2330
2539
|
/// The payer's own sessions, live ones first. PAYER-SCOPED: a caller sees only their own, which
|
|
2331
2540
|
/// is why this needs no role — a session id is not a secret from the person who paid for it.
|
|
2332
2541
|
///
|
|
@@ -2335,7 +2544,7 @@ type Engram =
|
|
|
2335
2544
|
/// It took no arguments, and a cursor added after the freeze is an argument-list change every
|
|
2336
2545
|
/// client would break on — the market paged its own pending withdrawals before its cut for the
|
|
2337
2546
|
/// same reason. The order is the order sessions were opened.
|
|
2338
|
-
listMySessions: (start: nat, limit: nat) -> (
|
|
2547
|
+
listMySessions: (start: nat, limit: nat) -> (Result_32) query;
|
|
2339
2548
|
///
|
|
2340
2549
|
/// ⟨0.16.0, L3⟩ Paged and enveloped like every other `list*`, and the envelope here is uniformity
|
|
2341
2550
|
/// rather than gating: this method cannot refuse anybody, so `#Err` is unreachable on it. That is
|
|
@@ -2348,7 +2557,7 @@ type Engram =
|
|
|
2348
2557
|
/// asked by strangers. `verifyEngramActiveOwner` on the registry answers only about the owner
|
|
2349
2558
|
/// IT recorded, so this chain is what a caller composes with when currency matters — which it
|
|
2350
2559
|
/// cannot do if it needs a role here.
|
|
2351
|
-
listOwnershipTransfers: (start: nat, limit: nat) -> (
|
|
2560
|
+
listOwnershipTransfers: (start: nat, limit: nat) -> (Result_31) query;
|
|
2352
2561
|
/// ⟨2026-09-29, the platform's question from the build review⟩ OWNER-ONLY: how many payment
|
|
2353
2562
|
/// signatures each agent has obtained today, and the daily limit (200, `PaymentSignCap`). The
|
|
2354
2563
|
/// owner's console stated the rule and showed no number, because nothing served one; a number it
|
|
@@ -2364,7 +2573,7 @@ type Engram =
|
|
|
2364
2573
|
/// marketplace's one shared count today is in the reply's `marketplace` field, with the limit this
|
|
2365
2574
|
/// engram enforces for it — beside the agents, never a row among them
|
|
2366
2575
|
/// (`PaymentSignCap.marketplaceRow`). Null when no marketplace is set.
|
|
2367
|
-
listPaymentSignatureCounts: (start: nat, limit: nat) -> (
|
|
2576
|
+
listPaymentSignatureCounts: (start: nat, limit: nat) -> (Result_30) query;
|
|
2368
2577
|
/// Agent records removed by a reset. Each row is a NAMED record with the fields `principal`,
|
|
2369
2578
|
/// `name`, `registeredAt` and `purgedAt` — read them BY NAME, never by position.
|
|
2370
2579
|
/// ⟨2026-09-29, the vocabulary ruling: pairing is the one verb that admits an agent⟩ The field
|
|
@@ -2404,7 +2613,7 @@ type Engram =
|
|
|
2404
2613
|
/// `invite` its enrolment named, and `ended` — why and on what day its engagement ended (its own
|
|
2405
2614
|
/// earlier ending, or the reset) — the facts `resyncAgentEdges` re-sends. The stored rows are
|
|
2406
2615
|
/// served as they are.
|
|
2407
|
-
listPurgedAgents: (start: nat, limit: nat) -> (
|
|
2616
|
+
listPurgedAgents: (start: nat, limit: nat) -> (Result_29) query;
|
|
2408
2617
|
/// ⟨0.16.0⟩ ONE ACCESSOR, folding `readReadLog` and `getDenialLog` — and the fold only became
|
|
2409
2618
|
/// safe because of a change made earlier in this same leg.
|
|
2410
2619
|
///
|
|
@@ -2466,7 +2675,13 @@ type Engram =
|
|
|
2466
2675
|
/// on the chained record — the same `RecordView` filter, and `withheld` counts what it removed
|
|
2467
2676
|
/// together with what `successFilter` removed. WHAT WOULD MAKE THIS WRONG: see `listAuditEntries`.
|
|
2468
2677
|
listReadLog: (successFilter: opt bool, start: nat, limit: nat) ->
|
|
2469
|
-
(
|
|
2678
|
+
(Result_28) query;
|
|
2679
|
+
/// ⟨2026-10-21, round 11 b⟩ The owner's notes, oldest first. Same visibility as
|
|
2680
|
+
/// `listRepudiations`, for the same reason: the owner and ACTIVE guardians read the rows; an agent
|
|
2681
|
+
/// reads only the entries it caused (follow-up 16 B), and every note is the owner's, so an agent
|
|
2682
|
+
/// gets an empty page whose `withheld` counts the notes in its window — never "there are none". A
|
|
2683
|
+
/// stranger, a pending guardian and the anonymous caller are refused.
|
|
2684
|
+
listRecordNotes: (start: nat, limit: nat) -> (Result_27) query;
|
|
2470
2685
|
/// Same visibility as listAuditEntries: the owner, this engram's agents, and ACTIVE guardians
|
|
2471
2686
|
/// see disputes. An unauthorized read REFUSES — it does not return an empty list, because an
|
|
2472
2687
|
/// empty list reads as "no disputes have been filed", which is a claim, not an absence of one.
|
|
@@ -2481,7 +2696,16 @@ type Engram =
|
|
|
2481
2696
|
/// window — which says disputes exist without showing them, never "none have been filed". WHAT
|
|
2482
2697
|
/// WOULD MAKE THIS WRONG: a ruling that an agent may see the disputes of its own writes; this would
|
|
2483
2698
|
/// then have to look up each disputed version's writer, which it does not do today.
|
|
2484
|
-
listRepudiations: (start: nat, limit: nat) -> (
|
|
2699
|
+
listRepudiations: (start: nat, limit: nat) -> (Result_26) query;
|
|
2700
|
+
/// ⟨2026-10-21, the owner's round-11 answer f⟩ OWNER-ONLY: the sign-ins, each with the name its app
|
|
2701
|
+
/// registered. The same tokens, in the same order and paged the same way, as `listBearerTokens`,
|
|
2702
|
+
/// each beside `clientName` — the RFC 7591 `client_name` the app registered when the token was
|
|
2703
|
+
/// issued (`People.SignIn` says when it is null, and that it is the app's own claim). A phone
|
|
2704
|
+
/// owner read "localhost" for every app signed in through a local bridge and could not tell two
|
|
2705
|
+
/// apps apart. A NEW method rather than a field on `BearerToken`: that record is stored (M0170)
|
|
2706
|
+
/// and `listBearerTokens`' reply is shipped (never widened). An agent, a guardian, a stranger and
|
|
2707
|
+
/// the anonymous caller are refused, by `listBearerTokens`' own gate and for its reason.
|
|
2708
|
+
listSignIns: (start: nat, limit: nat) -> (Result_25) query;
|
|
2485
2709
|
/// Owner: advance the review cursor — "I have seen everything up to and including uptoAuditId"
|
|
2486
2710
|
/// (null = everything at the current head). Bounded so the attestation can never cover entries
|
|
2487
2711
|
/// the console did not render; clamped monotonic (the cursor never moves backward) and to the
|
|
@@ -2492,6 +2716,17 @@ type Engram =
|
|
|
2492
2716
|
/// and this never inspects an operation or a role. Widening what the review shows therefore
|
|
2493
2717
|
/// changes only which ids the console can pass here — it cannot desynchronise the cursor.
|
|
2494
2718
|
markAgentWritesReviewed: (uptoAuditId: opt nat) -> (Result_12);
|
|
2719
|
+
/// ⟨2026-10-21, the owner's round-11 answer g⟩ AN AGENT READS ITS OWN GRANT — to the calling key
|
|
2720
|
+
/// only (`People.AgentGrant`): what it may read, where it may write, its rate, and the payment
|
|
2721
|
+
/// limits enforced against that key. It reveals nothing a refusal does not already say, and lets
|
|
2722
|
+
/// an agent correct itself before it writes rather than after the owner explains a refusal by
|
|
2723
|
+
/// hand. `getSpendPolicy` and `listAgents` stay owner-only; this answers one row, the caller's.
|
|
2724
|
+
///
|
|
2725
|
+
/// WHO: an ACTIVE agent (`Gated.authorize(#agentOrOwner)`). Refused, each by its own text: the
|
|
2726
|
+
/// owner by name (`People.OWNER_HAS_NO_GRANT`), a revoked or resigned agent ("Agent is revoked" /
|
|
2727
|
+
/// "Agent has resigned" — an ended agent may do nothing, and its old grant would read as powers),
|
|
2728
|
+
/// a guardian and a stranger ("Not authorized"), the anonymous caller. A query: it writes nothing.
|
|
2729
|
+
myGrant: () -> (Result_24) query;
|
|
2495
2730
|
/// The AGENT's current key nominates the key that will replace it. Nothing moves yet: the new
|
|
2496
2731
|
/// key must accept, by its own call, within 24 hours (`acceptAgentKeyNomination`). One pending
|
|
2497
2732
|
/// nomination per agent — a new one replaces the earlier one, and the record says which. Refused,
|
|
@@ -2526,8 +2761,8 @@ type Engram =
|
|
|
2526
2761
|
///
|
|
2527
2762
|
/// WHAT WOULD MAKE THIS WRONG: an await added between `ChildAllowance.take` and the registry call; the
|
|
2528
2763
|
/// registry's `CHILD_MIN_ATTACHED_CYCLES` moving without `CHILD_ATTACH_CYCLES`.
|
|
2529
|
-
openChildEngram: () -> (
|
|
2530
|
-
openSession: (config: SessionConfig, sig: PaymentSignature) -> (
|
|
2764
|
+
openChildEngram: () -> (Result_23);
|
|
2765
|
+
openSession: (config: SessionConfig, sig: PaymentSignature) -> (Result_22);
|
|
2531
2766
|
/// Withdraw tokens to the owner's principal. This is the ONLY way to
|
|
2532
2767
|
/// move tokens out of the engram to an external address, and the
|
|
2533
2768
|
/// destination is always hardcoded to the owner.
|
|
@@ -2592,10 +2827,13 @@ type Engram =
|
|
|
2592
2827
|
pairAgent: (arg: record {
|
|
2593
2828
|
code: text;
|
|
2594
2829
|
enrolment: Enrolment;
|
|
2595
|
-
}) -> (
|
|
2830
|
+
}) -> (Result_21);
|
|
2596
2831
|
/// ⟨0.16.0, L2.2 — renamed from `guardianPauseWrites`⟩ Same correction as freezePayments above:
|
|
2597
2832
|
/// owner-or-guardian, and `resumeWrites` never carried the prefix either.
|
|
2598
2833
|
pauseWrites: () -> (Result_1);
|
|
2834
|
+
/// ⟨2026-10-21, the owner's round-11 answer d⟩ `pauseWrites` with a reason; everything said of
|
|
2835
|
+
/// `freezePaymentsWithReason` holds, with `canPauseWrites` as the guardian's grant.
|
|
2836
|
+
pauseWritesWithReason: (reason: text) -> (Result_1);
|
|
2599
2837
|
/// What condensing through `toSeq` would do, and whether it is unlocked. COMMITS NOTHING — it is
|
|
2600
2838
|
/// a query, so it structurally cannot; a preview that wrote would be its own trap.
|
|
2601
2839
|
///
|
|
@@ -2614,7 +2852,7 @@ type Engram =
|
|
|
2614
2852
|
///
|
|
2615
2853
|
/// `unlocked` is the export-receipt gate ONLY. It is not a promise the condense will land: the
|
|
2616
2854
|
/// history-budget delta is checked at commit time and can still refuse a short prefix.
|
|
2617
|
-
previewCondense: (toSeq: nat) -> (
|
|
2855
|
+
previewCondense: (toSeq: nat) -> (Result_20) query;
|
|
2618
2856
|
/// A quote for a session this caller has not opened and is not committed to — the intent a
|
|
2619
2857
|
/// buyer signs against. Pure dry run, no state, no funds.
|
|
2620
2858
|
///
|
|
@@ -2642,6 +2880,27 @@ type Engram =
|
|
|
2642
2880
|
/// ⟨2026-10-02⟩ Answers the house `Types.SessionIntent` — ic402's intent with `expiry` spelled
|
|
2643
2881
|
/// `expiryNs`. Same value, same meaning; only the name carries the unit now.
|
|
2644
2882
|
previewOpenSession: () -> (SessionIntent) query;
|
|
2883
|
+
/// ⟨2026-10-21, the owner's round-11 answer k: a trim preview⟩ What a PROPOSED history policy
|
|
2884
|
+
/// would remove from the store as it stands — "about N old copies in F files would be removed" —
|
|
2885
|
+
/// asked BEFORE the owner saves it. A query: nothing is saved, armed or evicted.
|
|
2886
|
+
///
|
|
2887
|
+
/// WHO: the OWNER only (`#ownerOnly`). An agent, a guardian, a stranger and the anonymous caller
|
|
2888
|
+
/// are each refused with `requireOwner`'s words; the setter it previews is owner-only too.
|
|
2889
|
+
///
|
|
2890
|
+
/// HOW: the proposal must pass the setter's own checks (`retentionEntriesRefusal`), so the preview
|
|
2891
|
+
/// never answers for a policy the setter would refuse. The guards a save would arm are computed
|
|
2892
|
+
/// exactly as the setter computes them (`RetentionPolicy.armGuards`), and each file is planned by
|
|
2893
|
+
/// the planner the sweep executes (`MemoryRouter.previewEviction` → `Retention.plan`), as the
|
|
2894
|
+
/// owner (the sweep's `maintainPrincipal`), AT THE INSTANT its guard lets go — so a rule that
|
|
2895
|
+
/// waits 14 days is counted as it will stand then, when the agent floor has released more. Per
|
|
2896
|
+
/// rule: copies, files, bytes and `notBeforeNs`. The count is "about": writes before the rule
|
|
2897
|
+
/// takes effect change it.
|
|
2898
|
+
/// HONEST WHEN CUT SHORT: `complete = false` when the planning budget
|
|
2899
|
+
/// (`MemoryRouter.PREVIEW_MAX_DROPS`) ran out — the totals are then a floor, and say so.
|
|
2900
|
+
previewRetention: (entries: vec record {
|
|
2901
|
+
text;
|
|
2902
|
+
RetentionClassSpec;
|
|
2903
|
+
}) -> (Result_19) query;
|
|
2645
2904
|
/// Read one memory file at its current version.
|
|
2646
2905
|
///
|
|
2647
2906
|
/// Gated on the `read_memory` permission, so an agent holding that grant reaches it — unlike
|
|
@@ -2791,6 +3050,17 @@ type Engram =
|
|
|
2791
3050
|
/// `#NotFound` rather than `#Refused` when there is no such guardian: only the owner reaches this
|
|
2792
3051
|
/// line, so the roster is theirs and its contents are not a secret being withheld from them.
|
|
2793
3052
|
removeGuardian: (guardianPrincipal: principal) -> (Result_1);
|
|
3053
|
+
/// ⟨2026-10-21, the owner's round-11 answer a⟩ OWNER-ONLY: give an agent a new name. A name was
|
|
3054
|
+
/// fixed at the invite, and two agents both called "agent" is how the 2026-10-20 session started.
|
|
3055
|
+
/// Only the VALUE of the stored `AgentRecord.name` changes — no new state, no reshaped record —
|
|
3056
|
+
/// and the change is on the record as `agent.rename` (`principal=<key> name=<new name>`, the name
|
|
3057
|
+
/// last). An ended agent may be renamed too (`People.renameTarget` says why).
|
|
3058
|
+
/// Refused: an agent (itself included), a guardian and a stranger by `requireOwner`'s "Not owner",
|
|
3059
|
+
/// the anonymous caller by its own text; a name that is empty, over `MAX_NAME_LENGTH` or holds a
|
|
3060
|
+
/// line break is `#Invalid` (`People.nameRefusal`); an unknown key is `#NotFound`; the agent's
|
|
3061
|
+
/// current name is `#Conflict`. Nothing changes on any refusal. Not alerted: the owner is the one
|
|
3062
|
+
/// renaming (`ActionAlerts.classify` answers null for `agent.rename`).
|
|
3063
|
+
renameAgent: (agentPrincipal: principal, name: text) -> (Result_1);
|
|
2794
3064
|
/// Owner disavows a specific memory write, in the open. Marks — never deletes: the content and
|
|
2795
3065
|
/// the original audit entry stay exactly where they were; this appends a chained
|
|
2796
3066
|
/// `memory.repudiate` entry and lists the (path, version) so readers can see the dispute.
|
|
@@ -3084,6 +3354,12 @@ type Engram =
|
|
|
3084
3354
|
/// called it an "ops floor: retention enforcement deletes owner backup data silently", mitigated
|
|
3085
3355
|
/// by a `Debug.print` nobody reads. An owner lowering the cap is destroying their own backups;
|
|
3086
3356
|
/// they are told how many, in the reply and in the audit line.
|
|
3357
|
+
///
|
|
3358
|
+
/// ⟨2026-10-21, the owner's round-11 answers h and m⟩ The number now bounds EACH creator's
|
|
3359
|
+
/// backups of the kind (`Backup.enforceRetention`): an agent's finalize prunes only that agent's
|
|
3360
|
+
/// own, and this setter applies the number to every creator's set, so `prunedBackups` counts
|
|
3361
|
+
/// across all of them. "The write is the read" above went stale for a second phone, which never
|
|
3362
|
+
/// made the write: `getBackupRetention` is the read.
|
|
3087
3363
|
setBackupRetention: (dbType: text, maxBackups: nat) -> (Result_9);
|
|
3088
3364
|
/// Override the caps for ONE caller — an agent this owner trusts more, or less, than the rest.
|
|
3089
3365
|
setCallerSpendPolicy: (caller: principal, policy: SpendingPolicy) ->
|
|
@@ -3138,7 +3414,12 @@ type Engram =
|
|
|
3138
3414
|
/// the guardian honesty rail: integrity, not content). Active guardians only. Arming starts
|
|
3139
3415
|
/// from NOW (no history replay); url = null disarms and frees the slot.
|
|
3140
3416
|
setGuardianAlertConfig: (cfg: AlertConfig) -> (Result_1);
|
|
3141
|
-
/// Per-prefix retention policy.
|
|
3417
|
+
/// Per-prefix retention policy. The longest rule that covers a path wins; anything uncovered
|
|
3418
|
+
/// keeps everything.
|
|
3419
|
+
///
|
|
3420
|
+
/// ⟨2026-10-21, the owner's round-11 answer i⟩ "Covers" is the folder matcher
|
|
3421
|
+
/// (`AgentPaths.covers`, through `RetentionPolicy.resolve`): a rule ending in "/" governs
|
|
3422
|
+
/// everything beneath it, any other rule exactly one path. It was bare text prefix until that day.
|
|
3142
3423
|
///
|
|
3143
3424
|
/// A CHANGE does not take effect immediately, in EITHER direction: every prefix whose EFFECTIVE
|
|
3144
3425
|
/// class moves is guarded for the same window as the agent floor, so history cannot be
|
|
@@ -3347,6 +3628,26 @@ type Engram =
|
|
|
3347
3628
|
tokenName: text;
|
|
3348
3629
|
tokenVersion: text;
|
|
3349
3630
|
}) -> (Result_3);
|
|
3631
|
+
/// ⟨2026-10-21, the owner's round-11 answer e⟩ A GUARDIAN STEPS DOWN: the caller ends their own
|
|
3632
|
+
/// guardianship of this engram. It removes a power from the one who holds it and grants none.
|
|
3633
|
+
/// Before, only the owner could remove a guardian, so one who wanted out could only stop watching
|
|
3634
|
+
/// without anyone knowing — worse than an honest exit on the record.
|
|
3635
|
+
///
|
|
3636
|
+
/// WHO: anyone holding a guardian record here, `#Pending` or `#Active`; never refused for the
|
|
3637
|
+
/// record's state. The owner is refused by name (`People.OWNER_IS_NO_GUARDIAN`: their way is
|
|
3638
|
+
/// `removeGuardian`); an agent or a stranger is `#NotFound` (`People.NOT_A_GUARDIAN`, a fact about
|
|
3639
|
+
/// the caller told to the caller, as `resignAgent` does); the anonymous caller is refused.
|
|
3640
|
+
///
|
|
3641
|
+
/// WHAT IT RECORDS: one `guardian.stepDown` entry under `#Guardian`
|
|
3642
|
+
/// (`principal=<key> was=active|pending name=<name>`). Being a `guardian.*` operation it reaches
|
|
3643
|
+
/// the owner's and the other guardians' alerts in the #guardian class, on by default, and the
|
|
3644
|
+
/// guardian who left gets one farewell delivery before their channel goes (the drain's lazy
|
|
3645
|
+
/// cleanup in `drainActionAlerts`, as for a removed guardian).
|
|
3646
|
+
///
|
|
3647
|
+
/// WHAT IT LEAVES: a brake this guardian pulled stays on — lifting one is the owner's; their
|
|
3648
|
+
/// disputes stay on the record. Like `removeGuardian`, it is not terminal: the owner may invite
|
|
3649
|
+
/// the same person again.
|
|
3650
|
+
stepDownAsGuardian: () -> (Result_1);
|
|
3350
3651
|
/// OWNER force-close, for a session the payer abandoned.
|
|
3351
3652
|
///
|
|
3352
3653
|
/// ⟨R1b, ruled 2026-08-26: owner-gated, NO guardian.⟩ It moves someone else's money, and only ever
|
|
@@ -3828,7 +4129,7 @@ type ChildAllowanceRow =
|
|
|
3828
4129
|
type CheckpointPage =
|
|
3829
4130
|
record {
|
|
3830
4131
|
firstAvailableSeq: nat;
|
|
3831
|
-
page:
|
|
4132
|
+
page: Page_18;
|
|
3832
4133
|
scannedThroughSeq: nat;
|
|
3833
4134
|
};
|
|
3834
4135
|
type CertifiedAuditHead =
|
|
@@ -3846,6 +4147,28 @@ type CallerSignatureCount =
|
|
|
3846
4147
|
role: Role;
|
|
3847
4148
|
root: opt principal;
|
|
3848
4149
|
};
|
|
4150
|
+
type Brakes =
|
|
4151
|
+
record {
|
|
4152
|
+
payments: BrakeState;
|
|
4153
|
+
writes: BrakeState;
|
|
4154
|
+
};
|
|
4155
|
+
type BrakeState =
|
|
4156
|
+
record {
|
|
4157
|
+
on: bool;
|
|
4158
|
+
pull: opt BrakePull;
|
|
4159
|
+
};
|
|
4160
|
+
type BrakeRole =
|
|
4161
|
+
variant {
|
|
4162
|
+
Guardian;
|
|
4163
|
+
Owner;
|
|
4164
|
+
};
|
|
4165
|
+
type BrakePull =
|
|
4166
|
+
record {
|
|
4167
|
+
atNs: int;
|
|
4168
|
+
by: principal;
|
|
4169
|
+
reason: opt text;
|
|
4170
|
+
role: BrakeRole;
|
|
4171
|
+
};
|
|
3849
4172
|
type BearerTokenStatus =
|
|
3850
4173
|
variant {
|
|
3851
4174
|
Active;
|
|
@@ -3890,6 +4213,12 @@ type BackupRetentionReport =
|
|
|
3890
4213
|
maxBackups: nat;
|
|
3891
4214
|
prunedBackups: nat;
|
|
3892
4215
|
};
|
|
4216
|
+
type BackupRetention =
|
|
4217
|
+
record {
|
|
4218
|
+
dbType: text;
|
|
4219
|
+
isDefault: bool;
|
|
4220
|
+
maxBackups: nat;
|
|
4221
|
+
};
|
|
3893
4222
|
type BackupMetadata =
|
|
3894
4223
|
record {
|
|
3895
4224
|
backupId: text;
|
|
@@ -4008,6 +4337,18 @@ type AgentStatus =
|
|
|
4008
4337
|
Resigned;
|
|
4009
4338
|
Revoked;
|
|
4010
4339
|
};
|
|
4340
|
+
type AgentSpendToday =
|
|
4341
|
+
record {
|
|
4342
|
+
agents: Page_23;
|
|
4343
|
+
dayStartNs: int;
|
|
4344
|
+
};
|
|
4345
|
+
type AgentSpendRow =
|
|
4346
|
+
record {
|
|
4347
|
+
agent: principal;
|
|
4348
|
+
maxPerDay: opt nat;
|
|
4349
|
+
root: principal;
|
|
4350
|
+
spentToday: opt nat;
|
|
4351
|
+
};
|
|
4011
4352
|
type AgentRecord =
|
|
4012
4353
|
record {
|
|
4013
4354
|
earlierKeys: vec HeldKey;
|
|
@@ -4041,6 +4382,13 @@ type AgentPaymentSignatures =
|
|
|
4041
4382
|
root: principal;
|
|
4042
4383
|
signedToday: nat;
|
|
4043
4384
|
};
|
|
4385
|
+
type AgentGrant =
|
|
4386
|
+
record {
|
|
4387
|
+
key: principal;
|
|
4388
|
+
name: text;
|
|
4389
|
+
paymentLimits: PaymentLimits;
|
|
4390
|
+
permissions: AgentPermissions;
|
|
4391
|
+
};
|
|
4044
4392
|
type AgentEnding =
|
|
4045
4393
|
record {
|
|
4046
4394
|
day: int;
|