@engramx/idl 0.16.0-rc.15 → 0.16.0-rc.17
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 +613 -184
- package/dist/engram.idl.d.ts +577 -178
- package/dist/engram.idl.js +348 -184
- package/dist/registry.did +351 -73
- package/dist/registry.idl.d.ts +334 -73
- package/dist/registry.idl.js +113 -47
- 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;
|
|
@@ -225,187 +248,237 @@ type ResyncReport =
|
|
|
225
248
|
type Result_9 =
|
|
226
249
|
variant {
|
|
227
250
|
Err: Error;
|
|
228
|
-
Ok:
|
|
251
|
+
Ok: SignedTransaction;
|
|
252
|
+
};
|
|
253
|
+
type Result_82 =
|
|
254
|
+
variant {
|
|
255
|
+
Err: Error;
|
|
256
|
+
Ok: AgentRecord;
|
|
257
|
+
};
|
|
258
|
+
type Result_81 =
|
|
259
|
+
variant {
|
|
260
|
+
Err: Error;
|
|
261
|
+
Ok: record {activatesAtNs: int;};
|
|
262
|
+
};
|
|
263
|
+
type Result_80 =
|
|
264
|
+
variant {
|
|
265
|
+
Err: Error;
|
|
266
|
+
Ok: Eip712Registration;
|
|
229
267
|
};
|
|
230
268
|
type Result_8 =
|
|
231
269
|
variant {
|
|
232
270
|
Err: Error;
|
|
233
|
-
Ok:
|
|
271
|
+
Ok: vec Seat;
|
|
272
|
+
};
|
|
273
|
+
type Result_79 =
|
|
274
|
+
variant {
|
|
275
|
+
Err: Error;
|
|
276
|
+
Ok: CondenseResult;
|
|
277
|
+
};
|
|
278
|
+
type Result_78 =
|
|
279
|
+
variant {
|
|
280
|
+
Err: Error;
|
|
281
|
+
Ok: MemoryRangeExport;
|
|
282
|
+
};
|
|
283
|
+
type Result_76 =
|
|
284
|
+
variant {
|
|
285
|
+
Err: Error;
|
|
286
|
+
Ok: Page_25;
|
|
287
|
+
};
|
|
288
|
+
type Result_75 =
|
|
289
|
+
variant {
|
|
290
|
+
Err: Error;
|
|
291
|
+
Ok: AgentWriteReview;
|
|
292
|
+
};
|
|
293
|
+
type Result_74 =
|
|
294
|
+
variant {
|
|
295
|
+
Err: Error;
|
|
296
|
+
Ok: BackupMetadata;
|
|
297
|
+
};
|
|
298
|
+
type Result_73 =
|
|
299
|
+
variant {
|
|
300
|
+
Err: Error;
|
|
301
|
+
Ok: BackupRetention;
|
|
234
302
|
};
|
|
235
303
|
type Result_72 =
|
|
236
304
|
variant {
|
|
237
305
|
Err: Error;
|
|
238
|
-
Ok:
|
|
306
|
+
Ok: vec BirthRecord;
|
|
239
307
|
};
|
|
240
308
|
type Result_71 =
|
|
241
309
|
variant {
|
|
242
310
|
Err: Error;
|
|
243
|
-
Ok:
|
|
311
|
+
Ok: Brakes;
|
|
244
312
|
};
|
|
245
313
|
type Result_70 =
|
|
246
314
|
variant {
|
|
247
315
|
Err: Error;
|
|
248
|
-
Ok:
|
|
316
|
+
Ok: ChildAllowanceRow;
|
|
249
317
|
};
|
|
250
318
|
type Result_7 =
|
|
251
319
|
variant {
|
|
252
320
|
Err: Error;
|
|
253
|
-
Ok:
|
|
321
|
+
Ok: RailHealth;
|
|
254
322
|
};
|
|
255
323
|
type Result_69 =
|
|
256
324
|
variant {
|
|
257
325
|
Err: Error;
|
|
258
|
-
Ok:
|
|
326
|
+
Ok: ChildOpening;
|
|
259
327
|
};
|
|
260
328
|
type Result_68 =
|
|
261
329
|
variant {
|
|
262
330
|
Err: Error;
|
|
263
|
-
Ok:
|
|
331
|
+
Ok: blob;
|
|
332
|
+
};
|
|
333
|
+
type Result_67 =
|
|
334
|
+
variant {
|
|
335
|
+
Err: Error;
|
|
336
|
+
Ok: EvmAddresses;
|
|
264
337
|
};
|
|
265
338
|
type Result_66 =
|
|
266
339
|
variant {
|
|
267
340
|
Err: Error;
|
|
268
|
-
Ok:
|
|
341
|
+
Ok: AlertStatus;
|
|
269
342
|
};
|
|
270
343
|
type Result_65 =
|
|
271
344
|
variant {
|
|
272
345
|
Err: Error;
|
|
273
|
-
Ok:
|
|
346
|
+
Ok: MemoryHistory;
|
|
274
347
|
};
|
|
275
348
|
type Result_64 =
|
|
276
349
|
variant {
|
|
277
350
|
Err: Error;
|
|
278
|
-
Ok:
|
|
351
|
+
Ok: MemoryRetentionPolicy;
|
|
279
352
|
};
|
|
280
353
|
type Result_63 =
|
|
281
354
|
variant {
|
|
282
355
|
Err: Error;
|
|
283
|
-
Ok:
|
|
356
|
+
Ok: OwnerConsole;
|
|
284
357
|
};
|
|
285
358
|
type Result_62 =
|
|
286
359
|
variant {
|
|
287
360
|
Err: Error;
|
|
288
|
-
Ok:
|
|
361
|
+
Ok: record {paths: vec text;};
|
|
289
362
|
};
|
|
290
363
|
type Result_61 =
|
|
291
364
|
variant {
|
|
292
365
|
Err: Error;
|
|
293
|
-
Ok:
|
|
366
|
+
Ok: SigningFloorStatus;
|
|
294
367
|
};
|
|
295
368
|
type Result_60 =
|
|
296
369
|
variant {
|
|
297
370
|
Err: Error;
|
|
298
|
-
Ok:
|
|
371
|
+
Ok: SpendCeiling;
|
|
299
372
|
};
|
|
300
373
|
type Result_6 =
|
|
301
374
|
variant {
|
|
302
375
|
Err: Error;
|
|
303
|
-
Ok:
|
|
376
|
+
Ok: SignatureCounts;
|
|
304
377
|
};
|
|
305
378
|
type Result_59 =
|
|
306
379
|
variant {
|
|
307
380
|
Err: Error;
|
|
308
|
-
Ok:
|
|
381
|
+
Ok: SpendingPolicy;
|
|
309
382
|
};
|
|
310
383
|
type Result_58 =
|
|
311
384
|
variant {
|
|
312
385
|
Err: Error;
|
|
313
|
-
Ok:
|
|
386
|
+
Ok: StorageReport;
|
|
314
387
|
};
|
|
315
388
|
type Result_57 =
|
|
316
389
|
variant {
|
|
317
390
|
Err: Error;
|
|
318
|
-
Ok:
|
|
391
|
+
Ok: WalletBalances;
|
|
319
392
|
};
|
|
320
393
|
type Result_56 =
|
|
321
394
|
variant {
|
|
322
395
|
Err: Error;
|
|
323
|
-
Ok:
|
|
396
|
+
Ok: WorldIdConfig;
|
|
324
397
|
};
|
|
325
398
|
type Result_55 =
|
|
326
399
|
variant {
|
|
327
400
|
Err: Error;
|
|
328
|
-
Ok:
|
|
401
|
+
Ok: WorldIdRpContext;
|
|
329
402
|
};
|
|
330
403
|
type Result_54 =
|
|
331
404
|
variant {
|
|
332
405
|
Err: Error;
|
|
333
|
-
Ok:
|
|
406
|
+
Ok: opt text;
|
|
334
407
|
};
|
|
335
408
|
type Result_53 =
|
|
336
409
|
variant {
|
|
337
410
|
Err: Error;
|
|
338
|
-
Ok:
|
|
411
|
+
Ok: bool;
|
|
339
412
|
};
|
|
340
413
|
type Result_52 =
|
|
341
414
|
variant {
|
|
342
415
|
Err: Error;
|
|
343
|
-
Ok:
|
|
416
|
+
Ok: text;
|
|
344
417
|
};
|
|
345
418
|
type Result_51 =
|
|
346
419
|
variant {
|
|
347
420
|
Err: Error;
|
|
348
|
-
Ok:
|
|
421
|
+
Ok: Page_24;
|
|
349
422
|
};
|
|
350
423
|
type Result_50 =
|
|
351
424
|
variant {
|
|
352
425
|
Err: Error;
|
|
353
|
-
Ok:
|
|
426
|
+
Ok: AgentSpendToday;
|
|
354
427
|
};
|
|
355
428
|
type Result_5 =
|
|
356
429
|
variant {
|
|
357
430
|
Err: Error;
|
|
358
|
-
Ok:
|
|
431
|
+
Ok: record {returned: nat;};
|
|
359
432
|
};
|
|
360
433
|
type Result_49 =
|
|
361
434
|
variant {
|
|
362
435
|
Err: Error;
|
|
363
|
-
Ok:
|
|
436
|
+
Ok: Page_22;
|
|
364
437
|
};
|
|
365
438
|
type Result_48 =
|
|
366
439
|
variant {
|
|
367
440
|
Err: Error;
|
|
368
|
-
Ok:
|
|
441
|
+
Ok: Page_21;
|
|
369
442
|
};
|
|
370
443
|
type Result_47 =
|
|
371
444
|
variant {
|
|
372
445
|
Err: Error;
|
|
373
|
-
Ok:
|
|
446
|
+
Ok: RecordPage;
|
|
374
447
|
};
|
|
375
448
|
type Result_46 =
|
|
376
449
|
variant {
|
|
377
450
|
Err: Error;
|
|
378
|
-
Ok:
|
|
451
|
+
Ok: Page_20;
|
|
379
452
|
};
|
|
380
453
|
type Result_45 =
|
|
381
454
|
variant {
|
|
382
455
|
Err: Error;
|
|
383
|
-
Ok:
|
|
456
|
+
Ok: Page_19;
|
|
384
457
|
};
|
|
385
458
|
type Result_44 =
|
|
386
459
|
variant {
|
|
387
460
|
Err: Error;
|
|
388
|
-
Ok:
|
|
461
|
+
Ok: CheckpointPage;
|
|
389
462
|
};
|
|
390
463
|
type Result_43 =
|
|
391
464
|
variant {
|
|
392
465
|
Err: Error;
|
|
393
|
-
Ok:
|
|
466
|
+
Ok: Page_17;
|
|
394
467
|
};
|
|
395
468
|
type Result_42 =
|
|
396
469
|
variant {
|
|
397
470
|
Err: Error;
|
|
398
|
-
Ok:
|
|
471
|
+
Ok: Page_16;
|
|
399
472
|
};
|
|
400
473
|
type Result_41 =
|
|
401
474
|
variant {
|
|
402
475
|
Err: Error;
|
|
403
|
-
Ok:
|
|
476
|
+
Ok: Page_15;
|
|
404
477
|
};
|
|
405
478
|
type Result_40 =
|
|
406
479
|
variant {
|
|
407
480
|
Err: Error;
|
|
408
|
-
Ok:
|
|
481
|
+
Ok: Page_14;
|
|
409
482
|
};
|
|
410
483
|
type Result_4 =
|
|
411
484
|
variant {
|
|
@@ -415,52 +488,52 @@ type Result_4 =
|
|
|
415
488
|
type Result_39 =
|
|
416
489
|
variant {
|
|
417
490
|
Err: Error;
|
|
418
|
-
Ok:
|
|
491
|
+
Ok: Page_13;
|
|
419
492
|
};
|
|
420
493
|
type Result_38 =
|
|
421
494
|
variant {
|
|
422
495
|
Err: Error;
|
|
423
|
-
Ok:
|
|
496
|
+
Ok: Page_12;
|
|
424
497
|
};
|
|
425
498
|
type Result_37 =
|
|
426
499
|
variant {
|
|
427
500
|
Err: Error;
|
|
428
|
-
Ok:
|
|
501
|
+
Ok: ReceiptPage;
|
|
429
502
|
};
|
|
430
503
|
type Result_36 =
|
|
431
504
|
variant {
|
|
432
505
|
Err: Error;
|
|
433
|
-
Ok:
|
|
506
|
+
Ok: Page_10;
|
|
434
507
|
};
|
|
435
508
|
type Result_35 =
|
|
436
509
|
variant {
|
|
437
510
|
Err: Error;
|
|
438
|
-
Ok:
|
|
511
|
+
Ok: LogPage;
|
|
439
512
|
};
|
|
440
513
|
type Result_34 =
|
|
441
514
|
variant {
|
|
442
515
|
Err: Error;
|
|
443
|
-
Ok:
|
|
516
|
+
Ok: Page_8;
|
|
444
517
|
};
|
|
445
518
|
type Result_33 =
|
|
446
519
|
variant {
|
|
447
520
|
Err: Error;
|
|
448
|
-
Ok:
|
|
521
|
+
Ok: Page_7;
|
|
449
522
|
};
|
|
450
523
|
type Result_32 =
|
|
451
524
|
variant {
|
|
452
525
|
Err: Error;
|
|
453
|
-
Ok:
|
|
526
|
+
Ok: Page_6;
|
|
454
527
|
};
|
|
455
528
|
type Result_31 =
|
|
456
529
|
variant {
|
|
457
530
|
Err: Error;
|
|
458
|
-
Ok:
|
|
531
|
+
Ok: PaymentSignatureCounts;
|
|
459
532
|
};
|
|
460
533
|
type Result_30 =
|
|
461
534
|
variant {
|
|
462
535
|
Err: Error;
|
|
463
|
-
Ok:
|
|
536
|
+
Ok: Page_4;
|
|
464
537
|
};
|
|
465
538
|
type Result_3 =
|
|
466
539
|
variant {
|
|
@@ -470,52 +543,52 @@ type Result_3 =
|
|
|
470
543
|
type Result_29 =
|
|
471
544
|
variant {
|
|
472
545
|
Err: Error;
|
|
473
|
-
Ok:
|
|
546
|
+
Ok: Page_3;
|
|
474
547
|
};
|
|
475
548
|
type Result_28 =
|
|
476
549
|
variant {
|
|
477
550
|
Err: Error;
|
|
478
|
-
Ok:
|
|
551
|
+
Ok: Page_2;
|
|
479
552
|
};
|
|
480
553
|
type Result_27 =
|
|
481
554
|
variant {
|
|
482
555
|
Err: Error;
|
|
483
|
-
Ok:
|
|
556
|
+
Ok: Page_1;
|
|
484
557
|
};
|
|
485
558
|
type Result_26 =
|
|
486
559
|
variant {
|
|
487
560
|
Err: Error;
|
|
488
|
-
Ok:
|
|
561
|
+
Ok: Page;
|
|
489
562
|
};
|
|
490
563
|
type Result_25 =
|
|
491
564
|
variant {
|
|
492
565
|
Err: Error;
|
|
493
|
-
Ok:
|
|
566
|
+
Ok: AgentGrant;
|
|
494
567
|
};
|
|
495
568
|
type Result_24 =
|
|
496
569
|
variant {
|
|
497
570
|
Err: Error;
|
|
498
|
-
Ok:
|
|
571
|
+
Ok: principal;
|
|
499
572
|
};
|
|
500
573
|
type Result_23 =
|
|
501
574
|
variant {
|
|
502
575
|
Err: Error;
|
|
503
|
-
Ok:
|
|
576
|
+
Ok: EngramSessionState;
|
|
504
577
|
};
|
|
505
578
|
type Result_22 =
|
|
506
579
|
variant {
|
|
507
580
|
Err: Error;
|
|
508
|
-
Ok:
|
|
581
|
+
Ok: Pairing;
|
|
509
582
|
};
|
|
510
583
|
type Result_21 =
|
|
511
584
|
variant {
|
|
512
585
|
Err: Error;
|
|
513
|
-
Ok:
|
|
586
|
+
Ok: CondensePreview;
|
|
514
587
|
};
|
|
515
588
|
type Result_20 =
|
|
516
589
|
variant {
|
|
517
590
|
Err: Error;
|
|
518
|
-
Ok:
|
|
591
|
+
Ok: RetentionPreview;
|
|
519
592
|
};
|
|
520
593
|
type Result_2 =
|
|
521
594
|
variant {
|
|
@@ -525,52 +598,52 @@ type Result_2 =
|
|
|
525
598
|
type Result_19 =
|
|
526
599
|
variant {
|
|
527
600
|
Err: Error;
|
|
528
|
-
Ok:
|
|
601
|
+
Ok: vec BatchReadItem;
|
|
529
602
|
};
|
|
530
603
|
type Result_18 =
|
|
531
604
|
variant {
|
|
532
605
|
Err: Error;
|
|
533
|
-
Ok:
|
|
606
|
+
Ok: MemoryByteChunk;
|
|
534
607
|
};
|
|
535
608
|
type Result_17 =
|
|
536
609
|
variant {
|
|
537
610
|
Err: Error;
|
|
538
|
-
Ok:
|
|
611
|
+
Ok: EngramEscrowRecovery;
|
|
539
612
|
};
|
|
540
613
|
type Result_16 =
|
|
541
614
|
variant {
|
|
542
615
|
Err: Error;
|
|
543
|
-
Ok:
|
|
616
|
+
Ok: GuardianRecord;
|
|
544
617
|
};
|
|
545
618
|
type Result_15 =
|
|
546
619
|
variant {
|
|
547
620
|
Err: Error;
|
|
548
|
-
Ok:
|
|
621
|
+
Ok: ResetReport;
|
|
549
622
|
};
|
|
550
623
|
type Result_14 =
|
|
551
624
|
variant {
|
|
552
625
|
Err: Error;
|
|
553
|
-
Ok:
|
|
626
|
+
Ok: ResyncReport;
|
|
554
627
|
};
|
|
555
628
|
type Result_13 =
|
|
556
629
|
variant {
|
|
557
630
|
Err: Error;
|
|
558
|
-
Ok:
|
|
631
|
+
Ok: nat;
|
|
559
632
|
};
|
|
560
633
|
type Result_12 =
|
|
561
634
|
variant {
|
|
562
635
|
Err: Error;
|
|
563
|
-
Ok:
|
|
636
|
+
Ok: SessionContext;
|
|
564
637
|
};
|
|
565
638
|
type Result_11 =
|
|
566
639
|
variant {
|
|
567
640
|
Err: Error;
|
|
568
|
-
Ok:
|
|
641
|
+
Ok: MemoryFile;
|
|
569
642
|
};
|
|
570
643
|
type Result_10 =
|
|
571
644
|
variant {
|
|
572
645
|
Err: Error;
|
|
573
|
-
Ok:
|
|
646
|
+
Ok: BackupRetentionReport;
|
|
574
647
|
};
|
|
575
648
|
type Result_1 =
|
|
576
649
|
variant {
|
|
@@ -605,10 +678,17 @@ type RecordPage =
|
|
|
605
678
|
sealed: vec SealedEntry;
|
|
606
679
|
total: nat;
|
|
607
680
|
};
|
|
681
|
+
type RecordNote =
|
|
682
|
+
record {
|
|
683
|
+
about: nat;
|
|
684
|
+
atNs: int;
|
|
685
|
+
auditId: nat;
|
|
686
|
+
note: text;
|
|
687
|
+
};
|
|
608
688
|
type ReceiptPage =
|
|
609
689
|
record {
|
|
610
690
|
firstAvailableSeq: nat;
|
|
611
|
-
page:
|
|
691
|
+
page: Page_11;
|
|
612
692
|
scannedThroughSeq: nat;
|
|
613
693
|
};
|
|
614
694
|
type RailHealth =
|
|
@@ -639,7 +719,7 @@ type PurgedAgent =
|
|
|
639
719
|
};
|
|
640
720
|
type PaymentSignatureCounts =
|
|
641
721
|
record {
|
|
642
|
-
agents:
|
|
722
|
+
agents: Page_5;
|
|
643
723
|
day: int;
|
|
644
724
|
limit: nat;
|
|
645
725
|
marketplace: opt MarketplacePaymentSignatures;
|
|
@@ -655,6 +735,16 @@ type PaymentSignature =
|
|
|
655
735
|
sender: text;
|
|
656
736
|
signature: blob;
|
|
657
737
|
};
|
|
738
|
+
type PaymentLimits =
|
|
739
|
+
record {
|
|
740
|
+
maxConcurrentSessions: opt nat;
|
|
741
|
+
maxPerDay: opt nat;
|
|
742
|
+
maxPerTransaction: opt nat;
|
|
743
|
+
maxSessionDeposit: opt nat;
|
|
744
|
+
maxSessionDuration: opt int;
|
|
745
|
+
rateLimitPerMinute: opt nat;
|
|
746
|
+
sessionIdleTimeout: opt int;
|
|
747
|
+
};
|
|
658
748
|
type Pairing =
|
|
659
749
|
record {
|
|
660
750
|
agent: AgentRecord;
|
|
@@ -662,75 +752,71 @@ type Pairing =
|
|
|
662
752
|
};
|
|
663
753
|
type Page_9 =
|
|
664
754
|
record {
|
|
665
|
-
items: vec
|
|
755
|
+
items: vec MemoryLogEvent;
|
|
666
756
|
total: nat;
|
|
667
757
|
withheld: nat;
|
|
668
758
|
};
|
|
669
759
|
type Page_8 =
|
|
670
760
|
record {
|
|
671
|
-
items: vec
|
|
672
|
-
lastModifiedAtNs: int;
|
|
673
|
-
path: text;
|
|
674
|
-
version: nat;
|
|
675
|
-
};
|
|
761
|
+
items: vec ApprovalRequest;
|
|
676
762
|
total: nat;
|
|
677
763
|
withheld: nat;
|
|
678
764
|
};
|
|
679
765
|
type Page_7 =
|
|
680
766
|
record {
|
|
681
|
-
items: vec
|
|
767
|
+
items: vec EngramSessionState;
|
|
682
768
|
total: nat;
|
|
683
769
|
withheld: nat;
|
|
684
770
|
};
|
|
685
771
|
type Page_6 =
|
|
686
772
|
record {
|
|
687
|
-
items: vec
|
|
773
|
+
items: vec OwnershipTransfer;
|
|
688
774
|
total: nat;
|
|
689
775
|
withheld: nat;
|
|
690
776
|
};
|
|
691
777
|
type Page_5 =
|
|
692
778
|
record {
|
|
693
|
-
items: vec
|
|
779
|
+
items: vec AgentPaymentSignatures;
|
|
694
780
|
total: nat;
|
|
695
781
|
withheld: nat;
|
|
696
782
|
};
|
|
697
783
|
type Page_4 =
|
|
698
784
|
record {
|
|
699
|
-
items: vec
|
|
785
|
+
items: vec PurgedAgent;
|
|
700
786
|
total: nat;
|
|
701
787
|
withheld: nat;
|
|
702
788
|
};
|
|
703
789
|
type Page_3 =
|
|
704
790
|
record {
|
|
705
|
-
items: vec
|
|
791
|
+
items: vec AuditEntry;
|
|
706
792
|
total: nat;
|
|
707
793
|
withheld: nat;
|
|
708
794
|
};
|
|
709
|
-
type
|
|
795
|
+
type Page_25 =
|
|
710
796
|
record {
|
|
711
797
|
items: vec OwnerRow;
|
|
712
798
|
total: nat;
|
|
713
799
|
withheld: nat;
|
|
714
800
|
};
|
|
715
|
-
type
|
|
801
|
+
type Page_24 =
|
|
716
802
|
record {
|
|
717
803
|
items: vec ActivitySnapshot;
|
|
718
804
|
total: nat;
|
|
719
805
|
withheld: nat;
|
|
720
806
|
};
|
|
721
|
-
type
|
|
807
|
+
type Page_23 =
|
|
722
808
|
record {
|
|
723
|
-
items: vec
|
|
809
|
+
items: vec AgentSpendRow;
|
|
724
810
|
total: nat;
|
|
725
811
|
withheld: nat;
|
|
726
812
|
};
|
|
727
|
-
type
|
|
813
|
+
type Page_22 =
|
|
728
814
|
record {
|
|
729
815
|
items: vec AgentRecord;
|
|
730
816
|
total: nat;
|
|
731
817
|
withheld: nat;
|
|
732
818
|
};
|
|
733
|
-
type
|
|
819
|
+
type Page_21 =
|
|
734
820
|
record {
|
|
735
821
|
items: vec record {
|
|
736
822
|
name: text;
|
|
@@ -740,63 +826,87 @@ type Page_18 =
|
|
|
740
826
|
total: nat;
|
|
741
827
|
withheld: nat;
|
|
742
828
|
};
|
|
743
|
-
type
|
|
829
|
+
type Page_20 =
|
|
744
830
|
record {
|
|
745
831
|
items: vec BackupMetadata;
|
|
746
832
|
total: nat;
|
|
747
833
|
withheld: nat;
|
|
748
834
|
};
|
|
749
|
-
type
|
|
835
|
+
type Page_2 =
|
|
836
|
+
record {
|
|
837
|
+
items: vec RecordNote;
|
|
838
|
+
total: nat;
|
|
839
|
+
withheld: nat;
|
|
840
|
+
};
|
|
841
|
+
type Page_19 =
|
|
750
842
|
record {
|
|
751
843
|
items: vec BearerToken;
|
|
752
844
|
total: nat;
|
|
753
845
|
withheld: nat;
|
|
754
846
|
};
|
|
755
|
-
type
|
|
847
|
+
type Page_18 =
|
|
756
848
|
record {
|
|
757
849
|
items: vec CondenseCheckpointRow;
|
|
758
850
|
total: nat;
|
|
759
851
|
withheld: nat;
|
|
760
852
|
};
|
|
761
|
-
type
|
|
853
|
+
type Page_17 =
|
|
762
854
|
record {
|
|
763
855
|
items: vec CycleSnapshot;
|
|
764
856
|
total: nat;
|
|
765
857
|
withheld: nat;
|
|
766
858
|
};
|
|
767
|
-
type
|
|
859
|
+
type Page_16 =
|
|
768
860
|
record {
|
|
769
861
|
items: vec text;
|
|
770
862
|
total: nat;
|
|
771
863
|
withheld: nat;
|
|
772
864
|
};
|
|
773
|
-
type
|
|
865
|
+
type Page_15 =
|
|
774
866
|
record {
|
|
775
867
|
items: vec Eip712Destination;
|
|
776
868
|
total: nat;
|
|
777
869
|
withheld: nat;
|
|
778
870
|
};
|
|
779
|
-
type
|
|
871
|
+
type Page_14 =
|
|
780
872
|
record {
|
|
781
873
|
items: vec Eip712TypeView;
|
|
782
874
|
total: nat;
|
|
783
875
|
withheld: nat;
|
|
784
876
|
};
|
|
785
|
-
type
|
|
877
|
+
type Page_13 =
|
|
878
|
+
record {
|
|
879
|
+
items: vec GuardianDispute;
|
|
880
|
+
total: nat;
|
|
881
|
+
withheld: nat;
|
|
882
|
+
};
|
|
883
|
+
type Page_12 =
|
|
786
884
|
record {
|
|
787
885
|
items: vec GuardianRecord;
|
|
788
886
|
total: nat;
|
|
789
887
|
withheld: nat;
|
|
790
888
|
};
|
|
889
|
+
type Page_11 =
|
|
890
|
+
record {
|
|
891
|
+
items: vec ExportReceiptRow;
|
|
892
|
+
total: nat;
|
|
893
|
+
withheld: nat;
|
|
894
|
+
};
|
|
895
|
+
type Page_10 =
|
|
896
|
+
record {
|
|
897
|
+
items: vec MemoryFileRow;
|
|
898
|
+
total: nat;
|
|
899
|
+
withheld: nat;
|
|
900
|
+
};
|
|
791
901
|
type Page_1 =
|
|
792
902
|
record {
|
|
793
|
-
items: vec
|
|
903
|
+
items: vec Repudiation;
|
|
794
904
|
total: nat;
|
|
795
905
|
withheld: nat;
|
|
796
906
|
};
|
|
797
907
|
type Page =
|
|
798
908
|
record {
|
|
799
|
-
items: vec
|
|
909
|
+
items: vec SignIn;
|
|
800
910
|
total: nat;
|
|
801
911
|
withheld: nat;
|
|
802
912
|
};
|
|
@@ -968,6 +1078,13 @@ type MemoryHistory =
|
|
|
968
1078
|
retainedCount: nat;
|
|
969
1079
|
versions: vec MemoryVersionSummary;
|
|
970
1080
|
};
|
|
1081
|
+
type MemoryFileRow =
|
|
1082
|
+
record {
|
|
1083
|
+
lastModifiedAtNs: int;
|
|
1084
|
+
lastModifiedBy: opt principal;
|
|
1085
|
+
path: text;
|
|
1086
|
+
version: nat;
|
|
1087
|
+
};
|
|
971
1088
|
type MemoryFile =
|
|
972
1089
|
record {
|
|
973
1090
|
content: blob;
|
|
@@ -1015,7 +1132,7 @@ type LogPage =
|
|
|
1015
1132
|
record {
|
|
1016
1133
|
firstAvailableSeq: nat;
|
|
1017
1134
|
head: blob;
|
|
1018
|
-
page:
|
|
1135
|
+
page: Page_9;
|
|
1019
1136
|
};
|
|
1020
1137
|
type KeyNomination =
|
|
1021
1138
|
record {
|
|
@@ -1079,6 +1196,16 @@ type GuardianPermissions =
|
|
|
1079
1196
|
canRevokeAgents: bool;
|
|
1080
1197
|
scopes: opt vec text;
|
|
1081
1198
|
};
|
|
1199
|
+
type GuardianDispute =
|
|
1200
|
+
record {
|
|
1201
|
+
about: nat;
|
|
1202
|
+
atNs: int;
|
|
1203
|
+
auditId: nat;
|
|
1204
|
+
guardian: principal;
|
|
1205
|
+
path: opt text;
|
|
1206
|
+
reason: text;
|
|
1207
|
+
version: opt nat;
|
|
1208
|
+
};
|
|
1082
1209
|
type GenesisNote =
|
|
1083
1210
|
record {
|
|
1084
1211
|
genesisAtNs: int;
|
|
@@ -1181,10 +1308,17 @@ type Engram =
|
|
|
1181
1308
|
/// nomination names. That check compares the caller inside the module, where
|
|
1182
1309
|
/// test/key-replacement.test.mo runs it; this body names no roster gate, because the caller holds
|
|
1183
1310
|
/// no role here until the move.
|
|
1184
|
-
acceptAgentKeyNomination: (agentKey: principal) -> (
|
|
1311
|
+
acceptAgentKeyNomination: (agentKey: principal) -> (Result_82);
|
|
1185
1312
|
/// Consensus transform for the alert webhook outcall: collapse the response to status-only so
|
|
1186
1313
|
/// replicas agree regardless of response headers/body (we only care that the POST landed 2xx).
|
|
1187
1314
|
///
|
|
1315
|
+
/// ⟨CORRECTED 2026-10-21⟩ No longer a consensus transform: the alert outcall is non-replicated
|
|
1316
|
+
/// (`is_replicated = ?false` in `scanAndPost`), so ONE node sends the POST and runs this on its
|
|
1317
|
+
/// own response — there are no replicas to agree, and "on every replica" below now means "on that
|
|
1318
|
+
/// node". It stays so the response is collapsed to status-only before the engram reads it. The
|
|
1319
|
+
/// PUBLIC reasoning below is unchanged: the outcall protocol still calls it with no caller identity.
|
|
1320
|
+
/// `worldIdTransform` is still a true consensus transform (World ID stays replicated).
|
|
1321
|
+
///
|
|
1188
1322
|
/// PUBLIC: not a choice. The management canister invokes a transform on every replica as part of
|
|
1189
1323
|
/// the HTTP-outcall protocol, and that invocation carries no caller identity to gate on — a gate
|
|
1190
1324
|
/// here would refuse the only caller there is and break every alert this canister sends. Safe
|
|
@@ -1204,7 +1338,7 @@ type Engram =
|
|
|
1204
1338
|
/// and works while frozen; a value is 1–128 characters (an address, or a venue value such as an
|
|
1205
1339
|
/// account name). The action must be registered: a destination list belongs to an action, and a
|
|
1206
1340
|
/// list for no action would be a value nothing checks. The caller is the owner's app.
|
|
1207
|
-
addEip712Destination: (typeId: blob, value: text) -> (
|
|
1341
|
+
addEip712Destination: (typeId: blob, value: text) -> (Result_81);
|
|
1208
1342
|
/// Register a typed-data shape as signable. Owner-only, freeze-gated (a registration is a grant
|
|
1209
1343
|
/// of FUTURE authority — a frozen engram must not be able to widen what it can sign), and the
|
|
1210
1344
|
/// shape is IMMUTABLE: any change mints a new typeId.
|
|
@@ -1244,7 +1378,7 @@ type Engram =
|
|
|
1244
1378
|
};
|
|
1245
1379
|
primaryType: text;
|
|
1246
1380
|
verifyingContract: text;
|
|
1247
|
-
}) -> (
|
|
1381
|
+
}) -> (Result_80);
|
|
1248
1382
|
/// ⟨0.16.0, L1⟩ THE ROLE-CONFLICT ARM, and why three refusals here are not the same refusal.
|
|
1249
1383
|
///
|
|
1250
1384
|
/// This method had five distinct ways to say no through one `text`, and a caller could only tell
|
|
@@ -1255,6 +1389,15 @@ type Engram =
|
|
|
1255
1389
|
/// or the roster is full. Only the last is worth an agent's time to resolve.
|
|
1256
1390
|
addGuardian: (guardianPrincipal: principal, name: text, permissions:
|
|
1257
1391
|
GuardianPermissions) -> (Result_1);
|
|
1392
|
+
/// ⟨2026-10-21, the owner's round-11 answer b⟩ OWNER-ONLY: put a note on any entry of this
|
|
1393
|
+
/// engram's record — words, nothing else. Appends a chained `record.note` entry
|
|
1394
|
+
/// (`about=<id> note=<words>`) and keeps the note for `listRecordNotes`; answers the new entry's
|
|
1395
|
+
/// id. The entry noted may be any entry ever appended (`about` below the head), including one the
|
|
1396
|
+
/// ring no longer holds in full. An agent, a guardian, a stranger and the anonymous caller are
|
|
1397
|
+
/// refused by `requireOwner`'s own words. Empty words, words over `RecordWords.WORDS_MAX` or
|
|
1398
|
+
/// holding a line break are `#Invalid`; an id past the head is `#NotFound`; nothing is recorded
|
|
1399
|
+
/// on any refusal.
|
|
1400
|
+
addRecordNote: (about: nat, note: text) -> (Result_13);
|
|
1258
1401
|
/// Returns the write RECEIPT, not just the version.
|
|
1259
1402
|
///
|
|
1260
1403
|
/// The receipt was always computed and then thrown away: MemoryRouter hands back
|
|
@@ -1286,7 +1429,7 @@ type Engram =
|
|
|
1286
1429
|
/// Gated on requireWritesNotPaused — unlike the export. This one destroys retained entries, which
|
|
1287
1430
|
/// is exactly what a guardian pause exists to hold. No action alert is raised: the operation is
|
|
1288
1431
|
/// owner-initiated, owner-only, and already chained into the audit log.
|
|
1289
|
-
applyCondense: (toSeq: nat) -> (
|
|
1432
|
+
applyCondense: (toSeq: nat) -> (Result_79);
|
|
1290
1433
|
/// Owner-only: activate a guardian who has registered against an invite.
|
|
1291
1434
|
///
|
|
1292
1435
|
/// Until this call the guardian is `#Pending` and can do NOTHING — registering is a claim, this
|
|
@@ -1357,13 +1500,13 @@ type Engram =
|
|
|
1357
1500
|
///
|
|
1358
1501
|
/// The write half also refuses while writes are PAUSED.
|
|
1359
1502
|
backupInit: (dbType: text, backupType: BackupType, parentBackupId:
|
|
1360
|
-
opt text, sha256: text, backupLabel: opt text) -> (
|
|
1503
|
+
opt text, sha256: text, backupLabel: opt text) -> (Result_52);
|
|
1361
1504
|
/// Read one chunk of a finalized backup, by index.
|
|
1362
1505
|
///
|
|
1363
1506
|
/// ⚠ GATED ON `read_backup`, which is NOT the permission the upload half uses — that one is
|
|
1364
1507
|
/// `canAppendMemory`. Holding one says nothing about the other, deliberately: taking a backup and
|
|
1365
1508
|
/// carrying it away are different authorities.
|
|
1366
|
-
backupPullChunk: (backupId: text, chunkIndex: nat) -> (
|
|
1509
|
+
backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_68) query;
|
|
1367
1510
|
backupPushChunk: (backupId: text, chunkIndex: nat, data: blob) ->
|
|
1368
1511
|
(Result_1);
|
|
1369
1512
|
/// The OWNER cancels an agent's pending key nomination; the agent keeps its current key. Refused
|
|
@@ -1396,7 +1539,7 @@ type Engram =
|
|
|
1396
1539
|
/// ⟨2026-10-02⟩ The second parameter is NAMED `amountE6` now, as the census row above rules the
|
|
1397
1540
|
/// pair — e6 base units of the token named first. A name only: Candid passes arguments by
|
|
1398
1541
|
/// position, so nothing on the wire moved.
|
|
1399
|
-
convertEarningsToCycles: (token: text, amountE6: nat) -> (
|
|
1542
|
+
convertEarningsToCycles: (token: text, amountE6: nat) -> (Result_13);
|
|
1400
1543
|
/// Owner-only: mint a single-use invite code an agent redeems with `pairAgent`.
|
|
1401
1544
|
///
|
|
1402
1545
|
/// ⚠ READ THIS BEFORE INVITING SOMEONE BACK. Pairing is ONE-SHOT PER PRINCIPAL on
|
|
@@ -1415,7 +1558,7 @@ type Engram =
|
|
|
1415
1558
|
/// A principal that is already a GUARDIAN cannot become an agent — a guardian is an
|
|
1416
1559
|
/// independent check on agents, so one wallet must not hold both.
|
|
1417
1560
|
createAgentInvite: (name: text, permissions: AgentPermissions) ->
|
|
1418
|
-
(
|
|
1561
|
+
(Result_52);
|
|
1419
1562
|
/// Owner-only: mint an invite for a GUARDIAN — an independent check on agents, not a
|
|
1420
1563
|
/// co-owner and not a recovery agent.
|
|
1421
1564
|
///
|
|
@@ -1438,7 +1581,7 @@ type Engram =
|
|
|
1438
1581
|
/// So an invite that fails to redeem for that reason is not a bad code. The rule exists because
|
|
1439
1582
|
/// a check must be independent of the thing it checks.
|
|
1440
1583
|
createGuardianInvite: (name: text, permissions: GuardianPermissions) ->
|
|
1441
|
-
(
|
|
1584
|
+
(Result_52);
|
|
1442
1585
|
/// OWNER-ONLY deletion of a stored backup.
|
|
1443
1586
|
///
|
|
1444
1587
|
/// ⚠ NOT THE SAME GATE AS THE REST OF THE FAMILY, and the asymmetry is deliberate: `backupInit`,
|
|
@@ -1466,6 +1609,22 @@ type Engram =
|
|
|
1466
1609
|
/// `#NotFound` for an unknown id and `#Conflict` when the request is no longer pending, and it
|
|
1467
1610
|
/// does not change the policy — the next request over the same limit will be raised again.
|
|
1468
1611
|
denyRequest: (requestId: text, reason: text) -> (Result_1);
|
|
1612
|
+
/// ⟨2026-10-21, the owner's round-11 answer c⟩ A NEW GUARDIAN POWER, words only: an ACTIVE
|
|
1613
|
+
/// guardian disputes an agent's write. It never moves money, stops anything or changes a grant.
|
|
1614
|
+
/// Appends a chained `record.dispute` entry (`about=<id> reason=<words>`) and keeps the dispute
|
|
1615
|
+
/// for `listGuardianDisputes`; answers the new entry's id. NOT ALERTED, deliberately: a
|
|
1616
|
+
/// `guardian.*` operation would fall in the alerts' #guardian class, and which entries reach a
|
|
1617
|
+
/// phone is the held alerts round's to decide (`ActionAlerts.classify` answers null for
|
|
1618
|
+
/// `record.*`). The owner sees it on the record's Disputes tab.
|
|
1619
|
+
///
|
|
1620
|
+
/// WHO: every active guardian — no grant bit (`RecordWords` header says why). The OWNER is refused
|
|
1621
|
+
/// by name (`RecordWords.OWNER_DISPUTES_ELSEWHERE` — the owner's dispute is
|
|
1622
|
+
/// `repudiateMemoryWrite`); an agent and a stranger get "Not a guardian", a pending guardian "Guardian
|
|
1623
|
+
/// is pending approval", the anonymous caller the anonymous refusal.
|
|
1624
|
+
/// WHAT: an entry the owner's review would show (`qualifiesForReview` — an agent's append or
|
|
1625
|
+
/// revision, or a paid session's append) that succeeded, still held in full by the ring.
|
|
1626
|
+
/// One dispute per guardian per write (`#Conflict`, the first stands).
|
|
1627
|
+
disputeAgentWrite: (about: nat, reason: text) -> (Result_13);
|
|
1469
1628
|
/// Record that log entries [fromSeq, toSeq] were served, and return the root that proves it.
|
|
1470
1629
|
///
|
|
1471
1630
|
/// This is the receipt ledgerfs Q2 requires before any of those entries may be condensed away.
|
|
@@ -1479,7 +1638,7 @@ type Engram =
|
|
|
1479
1638
|
/// situation rather than a safety measure. It IS gated on requireMemoryAttached: a store that
|
|
1480
1639
|
/// failed its integrity check must not attest anything it cannot vouch for.
|
|
1481
1640
|
exportMemoryRange: (fromSeq: nat, toSeq: nat, authorFilter:
|
|
1482
|
-
opt principal) -> (
|
|
1641
|
+
opt principal) -> (Result_78);
|
|
1483
1642
|
/// ⟨0.16.0, L2.2 — renamed from `guardianFreezePayments`⟩ The prefix LIED about who may call it.
|
|
1484
1643
|
/// The gate is `requireOwnerOrGuardian`, and an owner freezing their own payments is the ordinary
|
|
1485
1644
|
/// case — the guardian is the exceptional one. A name that says otherwise sends an owner looking
|
|
@@ -1512,8 +1671,16 @@ type Engram =
|
|
|
1512
1671
|
/// ⚠ The three exclusions are a reading of intent, not a ruling: no declaration stated the scope
|
|
1513
1672
|
/// before this one. If any of them is wrong, this comment is where the argument should happen.
|
|
1514
1673
|
freezePayments: () -> (Result_1);
|
|
1674
|
+
/// ⟨2026-10-21, the owner's round-11 answer d⟩ `freezePayments` with a reason the strip and the
|
|
1675
|
+
/// guardian page show ("Sam froze payments: 'a payment I didn't expect'"). A NEW method, not an
|
|
1676
|
+
/// argument on `freezePayments`: a shipped argument tuple is frozen. Same callers, same grant, same
|
|
1677
|
+
/// brake: the owner, or an active guardian holding `canFreezePayments`; an agent, a stranger, a
|
|
1678
|
+
/// pending guardian and the anonymous caller are refused by `requireOwnerOrGuardian`'s own words.
|
|
1679
|
+
/// An empty reason is no reason; a reason too long or holding a line break is `#Invalid` and the
|
|
1680
|
+
/// brake is NOT pulled — the caller pulls it with `freezePayments`, or shortens the words.
|
|
1681
|
+
freezePaymentsWithReason: (reason: text) -> (Result_1);
|
|
1515
1682
|
/// Delivery status + config readback. Owner-only (the URL is a secret).
|
|
1516
|
-
getActionAlertStatus: () -> (
|
|
1683
|
+
getActionAlertStatus: () -> (Result_66) query;
|
|
1517
1684
|
/// Agents need to know what they may revise, so they can read it too. Whole-value config, same
|
|
1518
1685
|
/// carve-out as getProtectedPaths — and kept a SEPARATE method from it deliberately (L2.2): a
|
|
1519
1686
|
/// protected path and a revisable path are opposite grants, and one accessor for both would be a
|
|
@@ -1521,7 +1688,7 @@ type Engram =
|
|
|
1521
1688
|
///
|
|
1522
1689
|
/// Refusal reason preserved from the trap: a grant is a power, and its absence and its
|
|
1523
1690
|
/// concealment are different facts.
|
|
1524
|
-
getAgentRevisablePaths: () -> (
|
|
1691
|
+
getAgentRevisablePaths: () -> (Result_62) query;
|
|
1525
1692
|
/// OWNER-ONLY: every engagement's seat weeks on this engram, with the agent's root — the day it
|
|
1526
1693
|
/// paired, the days of its first and last payment signature, a 64-week map whose bit 0 is the week
|
|
1527
1694
|
/// of the last one, and how many were produced. Never an amount, a recipient or a nonce.
|
|
@@ -1532,7 +1699,7 @@ type Engram =
|
|
|
1532
1699
|
/// order. Anyone else is refused by name (`#Refused getAgentSeatWeeks: …`), never answered with an
|
|
1533
1700
|
/// empty page. Paged; `total` is every engagement ever paired here (a reset keeps the rows).
|
|
1534
1701
|
/// Two rows can name one root: an agent paired again after it left is a second engagement.
|
|
1535
|
-
getAgentSeatWeeks: (start: nat, limit: nat) -> (
|
|
1702
|
+
getAgentSeatWeeks: (start: nat, limit: nat) -> (Result_76) query;
|
|
1536
1703
|
/// Owner: everything written into this engram by someone other than the owner since the last
|
|
1537
1704
|
/// markAgentWritesReviewed() — agent appends/revisions AND paid-session appends (see
|
|
1538
1705
|
/// qualifiesForReview for why those two families are recognised differently).
|
|
@@ -1540,7 +1707,7 @@ type Engram =
|
|
|
1540
1707
|
/// them — the UI must page (markAgentWritesReviewed(?lastShownId)) and must NOT present 200
|
|
1541
1708
|
/// as a total. `earliest` discloses ring eviction — if cursor < earliest, entries between them
|
|
1542
1709
|
/// aged out of the ring (the CHAIN still proves total count; this view can't show their bodies).
|
|
1543
|
-
getAgentWriteReview: () -> (
|
|
1710
|
+
getAgentWriteReview: () -> (Result_75) query;
|
|
1544
1711
|
/// Why anchoring is or is not advancing. PUBLIC: ungated on purpose — detecting a stalled
|
|
1545
1712
|
/// engram is the point, a gated read would fail-to-empty and hand a third party fabricated zeros,
|
|
1546
1713
|
/// and none of these fields is a secret — `total` is already public via getCertifiedAuditHead.
|
|
@@ -1559,7 +1726,18 @@ type Engram =
|
|
|
1559
1726
|
/// below serves the same head WITH the subnet certificate for a caller that needs to verify it
|
|
1560
1727
|
/// was signed rather than asserted.
|
|
1561
1728
|
getAuditHead: () -> (AuditHead) query;
|
|
1562
|
-
getBackupMetadata: (backupId: text) -> (
|
|
1729
|
+
getBackupMetadata: (backupId: text) -> (Result_74) query;
|
|
1730
|
+
/// ⟨2026-10-21, the owner's round-11 answer m: a backup-retention getter⟩ How many backups of
|
|
1731
|
+
/// `dbType` each creator keeps, and whether that is the default — the read `setBackupRetention`
|
|
1732
|
+
/// lacked, so "Keeps your newest 3" showed only on the phone that last set it.
|
|
1733
|
+
///
|
|
1734
|
+
/// WHO: the OWNER, and an active AGENT holding `canAppendMemory` — the permission that lets it
|
|
1735
|
+
/// upload backups, which are exactly the backups this number bounds (`#perm(#append_memory)`).
|
|
1736
|
+
/// Refused, each by the gate's own words: an agent without that permission ("Permission
|
|
1737
|
+
/// denied"), a revoked or resigned agent, a guardian (guardians take no backups), a stranger and
|
|
1738
|
+
/// the anonymous caller. A kind the setter would refuse is `#Invalid` here too
|
|
1739
|
+
/// (`Backup.getRetention`). Records nothing (a query).
|
|
1740
|
+
getBackupRetention: (dbType: text) -> (Result_73) query;
|
|
1563
1741
|
/// The cashier this engram recognises as its rent biller — `null` until the registry pushes one.
|
|
1564
1742
|
///
|
|
1565
1743
|
/// PUBLIC: a payer about to send money needs to know which cashier this engram will accept credit
|
|
@@ -1567,6 +1745,23 @@ type Engram =
|
|
|
1567
1745
|
/// never become rent. The registry publishes the same fact as `getRentBiller`; publishing it here
|
|
1568
1746
|
/// too is what lets the two be COMPARED, which is the only way to catch a mismatch.
|
|
1569
1747
|
getBillerId: () -> (opt principal) query;
|
|
1748
|
+
/// This engram's BIRTH CHAIN, root first: its own record last, its parent's before it, and so on
|
|
1749
|
+
/// ⟨2026-10-26, the owner's lineage ruling L3A⟩.
|
|
1750
|
+
///
|
|
1751
|
+
/// OWNER ONLY. The owner decides whom to show it to — the chain names the engrams this one descends
|
|
1752
|
+
/// from, which is the owner's to disclose, not the registry's. The certified half is at the registry
|
|
1753
|
+
/// (`getCertifiedBirth`, public, revealing only whether a fingerprint is present); the client's
|
|
1754
|
+
/// `verifyBirthChain` checks both. Refused to anyone else by the combinator (`#ownerOnly`).
|
|
1755
|
+
getBirthChain: () -> (Result_72) query;
|
|
1756
|
+
/// ⟨2026-10-21, the owner's round-11 answer d⟩ Each brake: on or off, and while on, who pulled it
|
|
1757
|
+
/// LAST (their key and whether as owner or guardian), since when, and the reason they gave — the
|
|
1758
|
+
/// same person and time as the newest brake entry on the record (`RecordWords.BrakePull`). For the
|
|
1759
|
+
/// owner's status strip and the guardian page. The OWNER and ACTIVE GUARDIANS may read it; an
|
|
1760
|
+
/// agent, a stranger, a pending guardian and the anonymous caller are refused (`#ownerOrGuardian`
|
|
1761
|
+
/// — an agent learns a brake is on from the refusal of what it tried, and needs no more). `pull`
|
|
1762
|
+
/// is null for a brake that is off, and for one carried on across the upgrade that added this
|
|
1763
|
+
/// read (who pulled it was not recorded then) — never a guessed pull.
|
|
1764
|
+
getBrakes: () -> (Result_71) query;
|
|
1570
1765
|
/// ⟨0.16.0, L9/L10 — census row⟩ `Wire.CertifiedAuditHead`, not an anonymous record. The
|
|
1571
1766
|
/// registry, market and cashier already served the shared type; the engram — the canister that
|
|
1572
1767
|
/// IS the evidence product — was the one chain still answering in a shape of its own, missing
|
|
@@ -1589,11 +1784,11 @@ type Engram =
|
|
|
1589
1784
|
/// query's state writes are discarded when it returns, and the `denied` call first written here
|
|
1590
1785
|
/// recorded nothing while reading as if it did. The refusal is loud in the reply instead. WHAT
|
|
1591
1786
|
/// WOULD MAKE THIS WRONG: a reason to record who asked — then this becomes an update that says so.
|
|
1592
|
-
getChildAllowance: (agentPrincipal: principal) -> (
|
|
1787
|
+
getChildAllowance: (agentPrincipal: principal) -> (Result_70) query;
|
|
1593
1788
|
/// Owner-only, Billing-class: what opening an engram costs this engram, the balance below which an
|
|
1594
1789
|
/// agent's request is refused, the balance now, and every agent's allowance. The console's cost
|
|
1595
1790
|
/// sentence reads it. Cycles are owner-class information, as on the owner's console read.
|
|
1596
|
-
getChildOpening: () -> (
|
|
1791
|
+
getChildOpening: () -> (Result_69) query;
|
|
1597
1792
|
/// Derive the shared memory-encryption key, encrypted under the caller's transport
|
|
1598
1793
|
/// public key. Gated to owner + read-agents (the same principals allowed to read
|
|
1599
1794
|
/// memory). The client decrypts it locally with its transport secret key.
|
|
@@ -1618,7 +1813,7 @@ type Engram =
|
|
|
1618
1813
|
/// cost. Stated here because L7 requires the reason be readable from the interface rather than
|
|
1619
1814
|
/// inferred by opening the body — which is exactly what had to happen to write this line.
|
|
1620
1815
|
getEncryptedMemoryKey: (epoch: opt nat, transportPublicKey: blob) ->
|
|
1621
|
-
(
|
|
1816
|
+
(Result_68);
|
|
1622
1817
|
/// ⟨0.16.0, owner ruling 2026-08-20 — option (a)⟩ `x402Support` REPORTS THE RAIL, not a constant.
|
|
1623
1818
|
///
|
|
1624
1819
|
/// The card's config hardcodes `x402Support = true`, answering a buyer's question with a fact
|
|
@@ -1713,7 +1908,7 @@ type Engram =
|
|
|
1713
1908
|
/// It refuses rather than half-answers: if either address cannot be derived the reply is
|
|
1714
1909
|
/// `#Err`, never a record carrying an empty string (ic402's `getEvmAddress` answers `""` on a
|
|
1715
1910
|
/// failed derivation — that is fail-to-empty on a money surface, and it stops here).
|
|
1716
|
-
getEvmAddress: () -> (
|
|
1911
|
+
getEvmAddress: () -> (Result_67);
|
|
1717
1912
|
/// The owner's OWN EVM address, if they registered one — distinct from `getEvmAddress`, which is
|
|
1718
1913
|
/// the address this canister derives for itself.
|
|
1719
1914
|
///
|
|
@@ -1728,7 +1923,7 @@ type Engram =
|
|
|
1728
1923
|
/// the management canister's `ecdsa_public_key`. A query cannot await, so the round-trip is the
|
|
1729
1924
|
/// cost — stated here because L7 requires the reason be readable from the interface rather than
|
|
1730
1925
|
/// inferred by opening the body.
|
|
1731
|
-
getEvmSignerAddress: () -> (
|
|
1926
|
+
getEvmSignerAddress: () -> (Result_52);
|
|
1732
1927
|
/// PUBLIC: where this chain begins, for the stranger deciding whether to trust it.
|
|
1733
1928
|
///
|
|
1734
1929
|
/// The fourth of the four evidence methods (`getAuditHead`, `getCertifiedAuditHead`,
|
|
@@ -1737,7 +1932,7 @@ type Engram =
|
|
|
1737
1932
|
/// cannot verify it, and nothing here identifies anybody.
|
|
1738
1933
|
getGenesisNote: () -> (GenesisNote) query;
|
|
1739
1934
|
/// A guardian's own channel status (their URL is their secret — each guardian sees only theirs).
|
|
1740
|
-
getGuardianAlertStatus: () -> (
|
|
1935
|
+
getGuardianAlertStatus: () -> (Result_66) query;
|
|
1741
1936
|
/// The market this engram will accept signing requests from — `null` until the registry pushes
|
|
1742
1937
|
/// one at spawn, which is why `requireMarket` refuses fleet-wide today.
|
|
1743
1938
|
///
|
|
@@ -1767,7 +1962,7 @@ type Engram =
|
|
|
1767
1962
|
/// never renumbered: the next page starts at the last version returned plus one. Defaults
|
|
1768
1963
|
/// return the whole history of any file a pre-FD engram could have held.
|
|
1769
1964
|
getMemoryHistory: (path: text, start: opt nat, max: opt nat) ->
|
|
1770
|
-
(
|
|
1965
|
+
(Result_65) query;
|
|
1771
1966
|
/// PUBLIC: the epoch alone, and deliberately nothing else (rotation study D4). A `rotatedAt[]`
|
|
1772
1967
|
/// history would be a public, fleet-enumerable feed of when each owner terminated a trust
|
|
1773
1968
|
/// relationship — readable by, among others, the party just terminated.
|
|
@@ -1808,7 +2003,7 @@ type Engram =
|
|
|
1808
2003
|
/// Refusal reasons of both merge: an empty policy reads as "nothing is capped, every version kept
|
|
1809
2004
|
/// forever" — a claim about what this engram will DESTROY — and an empty guard list reads as
|
|
1810
2005
|
/// "nothing is held back".
|
|
1811
|
-
getMemoryRetentionPolicy: () -> (
|
|
2006
|
+
getMemoryRetentionPolicy: () -> (Result_64) query;
|
|
1812
2007
|
/// The metrics reader this engram answers — `null` until the spawning registry names one.
|
|
1813
2008
|
///
|
|
1814
2009
|
/// PUBLIC: an owner deciding whether to switch the read off needs to know who it is, and anyone
|
|
@@ -1821,7 +2016,7 @@ type Engram =
|
|
|
1821
2016
|
/// see: the only row it can ever return is the caller's own, so "you are not a guardian here" is
|
|
1822
2017
|
/// a fact about the caller, told to the caller. There is nothing to leak by omission — which is
|
|
1823
2018
|
/// the test the #NotFound arm sets.
|
|
1824
|
-
getMyGuardianStatus: () -> (
|
|
2019
|
+
getMyGuardianStatus: () -> (Result_16) query;
|
|
1825
2020
|
/// ⟨0.16.0, NEW⟩ The gated half of the status() split.
|
|
1826
2021
|
///
|
|
1827
2022
|
/// Every field is bare — no masking, no `authorized` discriminator — because reaching this record
|
|
@@ -1831,7 +2026,7 @@ type Engram =
|
|
|
1831
2026
|
/// was `nat`, then widened to `opt nat` so a refusal could be `null`, which broke every published
|
|
1832
2027
|
/// client (rule 4) and bought a masked answer nobody had asked for — the census could not even
|
|
1833
2028
|
/// find a consumer that read the masked `0`. Behind a gate there is nobody to mask it from.
|
|
1834
|
-
getOwnerConsole: () -> (
|
|
2029
|
+
getOwnerConsole: () -> (Result_63) query;
|
|
1835
2030
|
/// Owner + agents only (agents need it to avoid writing protected paths).
|
|
1836
2031
|
///
|
|
1837
2032
|
/// A NAMED RECORD, not a Page: the setter replaces this list wholesale, so there is no window to
|
|
@@ -1843,7 +2038,7 @@ type Engram =
|
|
|
1843
2038
|
/// path on this engram is protected", and an agent consults this list precisely to avoid
|
|
1844
2039
|
/// writing one — so a fabricated empty here does not merely misinform, it invites the write the
|
|
1845
2040
|
/// list exists to prevent.
|
|
1846
|
-
getProtectedPaths: () -> (
|
|
2041
|
+
getProtectedPaths: () -> (Result_62) query;
|
|
1847
2042
|
/// Whether the metrics reader's read is answered — `true` from birth.
|
|
1848
2043
|
///
|
|
1849
2044
|
/// PUBLIC: the promise that an owner can switch this read off can be checked only if the switch
|
|
@@ -1852,7 +2047,7 @@ type Engram =
|
|
|
1852
2047
|
/// Owner-only, Billing-class: the signing floor, the balance, one signature's price, and how many
|
|
1853
2048
|
/// payment signatures the balance carries above the floor before `signX402Payment` is refused by
|
|
1854
2049
|
/// name. The same numbers the check uses, so Billing can say only what the engram enforces.
|
|
1855
|
-
getSigningFloor: () -> (
|
|
2050
|
+
getSigningFloor: () -> (Result_61) query;
|
|
1856
2051
|
/// The registry that spawned this engram, if it recorded one.
|
|
1857
2052
|
///
|
|
1858
2053
|
/// PUBLIC: it is the provenance claim. An engram asserting it is part of a fleet, under that
|
|
@@ -1869,7 +2064,7 @@ type Engram =
|
|
|
1869
2064
|
/// configuration, and the engram-wide total would also tell one agent how much the others spent.
|
|
1870
2065
|
/// A refusal names this method (`Gated.gatedResult`) rather than answering null/0 — a ceiling of
|
|
1871
2066
|
/// "none" and a spend of 0 are both real answers, so a fabricated one would be read as fact.
|
|
1872
|
-
getSpendCeiling: () -> (
|
|
2067
|
+
getSpendCeiling: () -> (Result_60) query;
|
|
1873
2068
|
/// Read the caps in force for a caller.
|
|
1874
2069
|
///
|
|
1875
2070
|
/// OWNER-ONLY, and this is where it diverges from the market's inbound twin, which is public.
|
|
@@ -1877,8 +2072,8 @@ type Engram =
|
|
|
1877
2072
|
/// Here the engram serves no 402s at all: these caps are the owner's private custody
|
|
1878
2073
|
/// configuration, and publishing them would tell any caller exactly how large a signing request
|
|
1879
2074
|
/// can be before it needs an approval nobody is watching for.
|
|
1880
|
-
getSpendPolicy: (caller: opt principal) -> (
|
|
1881
|
-
getStorageStats: () -> (
|
|
2075
|
+
getSpendPolicy: (caller: opt principal) -> (Result_59) query;
|
|
2076
|
+
getStorageStats: () -> (Result_58) query;
|
|
1882
2077
|
/// Timer arm-state. PUBLIC and deliberately so: these timers are self-arming to save cycles,
|
|
1883
2078
|
/// and an optimisation nobody can verify is an optimisation nobody should trust. Cheap to read,
|
|
1884
2079
|
/// leaks nothing (booleans about our own scheduling).
|
|
@@ -1949,12 +2144,12 @@ type Engram =
|
|
|
1949
2144
|
/// ⟨L7⟩ MARKER ADDED 2026-08-23, reasoning above UNCHANGED — this block already said "Stays an
|
|
1950
2145
|
/// UPDATE, marked per L7: it awaits three ICRC-1 ledgers". It was marked in prose and invisible
|
|
1951
2146
|
/// to any gate; the glyph is what `scripts/check-update-for-read.mjs` matches.
|
|
1952
|
-
getWalletBalances: () -> (
|
|
2147
|
+
getWalletBalances: () -> (Result_57);
|
|
1953
2148
|
/// Refusal reason preserved, and it is the clearest case of why a masked read is worse than no
|
|
1954
2149
|
/// read: three empty strings with `configured = false` is a VALID-LOOKING answer meaning "this
|
|
1955
2150
|
/// engram has no World ID configuration" — handed to a caller who merely lacks a grant. The
|
|
1956
2151
|
/// fabrication is indistinguishable from the truth by construction.
|
|
1957
|
-
getWorldIdConfig: () -> (
|
|
2152
|
+
getWorldIdConfig: () -> (Result_56) query;
|
|
1958
2153
|
/// ⟨L7⟩ UPDATE, NOT QUERY: this awaits THREE system calls — `raw_rand()` for the nonce,
|
|
1959
2154
|
/// `Call.signWithEcdsa` for the signature, and `worldIdRpPublicKey()` for the derived key. A
|
|
1960
2155
|
/// query can do none of them.
|
|
@@ -1963,7 +2158,7 @@ type Engram =
|
|
|
1963
2158
|
/// Valid iff the derived signer address (getWorldIdRpSignerAddress) is registered for this rp_id in
|
|
1964
2159
|
/// the World Developer Portal. Short-lived (300s TTL, idkit-server's default) and single-purpose —
|
|
1965
2160
|
/// it authorizes opening one verification request, nothing else.
|
|
1966
|
-
getWorldIdRpContext: () -> (
|
|
2161
|
+
getWorldIdRpContext: () -> (Result_55);
|
|
1967
2162
|
/// Owner-only: the EVM address derived from the engram's dedicated World ID RP signing key (the
|
|
1968
2163
|
/// "worldid-rp" tECDSA path). Register THIS address as the rp_id's signer in the World Developer
|
|
1969
2164
|
/// Portal — the engram never holds or exports a private key (only threshold shares exist, on the
|
|
@@ -1973,7 +2168,7 @@ type Engram =
|
|
|
1973
2168
|
/// awaits `worldIdRpPublicKey()` (management `ecdsa_public_key`), and it calls `denied()` on
|
|
1974
2169
|
/// refusal — a state write, which a query cannot perform. So even if the key were cached this
|
|
1975
2170
|
/// could not become a query without silently retiring its denial record (ADR-0002's class).
|
|
1976
|
-
getWorldIdRpSignerAddress: () -> (
|
|
2171
|
+
getWorldIdRpSignerAddress: () -> (Result_52);
|
|
1977
2172
|
/// The verified IDKitResult, verbatim, as World's /api/v4/verify accepted it — the re-checkable
|
|
1978
2173
|
/// artifact behind verifiedHuman. Role-gated because it carries the NULLIFIER.
|
|
1979
2174
|
/// `Result<opt Text>` — and the double wrapper is the entire point, not redundancy.
|
|
@@ -1992,7 +2187,7 @@ type Engram =
|
|
|
1992
2187
|
/// `///`, so the dead name was PUBLISHED in engram.did and pointed every client at a method the
|
|
1993
2188
|
/// canister does not serve. The tombstones below and at `about()` are historical and correct as
|
|
1994
2189
|
/// written; this one was present tense, which is the difference that matters.⟩
|
|
1995
|
-
getWorldIdVerification: () -> (
|
|
2190
|
+
getWorldIdVerification: () -> (Result_54) query;
|
|
1996
2191
|
/// ⟨0.16.0, L1⟩ THE EMERGENCY FAMILY. Every refusal below is `#Refused` or `#NotFound`, and the
|
|
1997
2192
|
/// absence of a `#Conflict` here is the point: these are the calls someone makes while something
|
|
1998
2193
|
/// is going wrong, and the only two answers that help are "you may not do this" and "there is
|
|
@@ -2067,7 +2262,7 @@ type Engram =
|
|
|
2067
2262
|
///
|
|
2068
2263
|
/// Owner-gated because it reports on custody posture, and answered as a Result so that a
|
|
2069
2264
|
/// wrong-identity caller gets a refusal rather than a bare `false` that reads as "no address yet".
|
|
2070
|
-
isEvmAddressCached: () -> (
|
|
2265
|
+
isEvmAddressCached: () -> (Result_53) query;
|
|
2071
2266
|
/// Issue an OAuth authorization code. Called by an OAuth client's sign-in bridge
|
|
2072
2267
|
/// (an `/auth/connector`-style route) after II authentication. The client then
|
|
2073
2268
|
/// redirects the user's browser to `redirectUri` with `?code=<this>` so the
|
|
@@ -2075,7 +2270,7 @@ type Engram =
|
|
|
2075
2270
|
///
|
|
2076
2271
|
/// Owner-only: only the engram owner can authorize a Connector install.
|
|
2077
2272
|
issueAuthCode: (redirectUri: text, scope: text, codeChallenge: text,
|
|
2078
|
-
clientId: opt text) -> (
|
|
2273
|
+
clientId: opt text) -> (Result_52);
|
|
2079
2274
|
/// ⟨0.16.0⟩ `getCycleSnapshotSource` DELETED — folded into `CycleSnapshot.source`, one label per
|
|
2080
2275
|
/// ROW. A single label for a whole ring misattributes every row recorded under the other source,
|
|
2081
2276
|
/// and the source flips by design (self-call first, balance on fallback). Its documentation of
|
|
@@ -2089,7 +2284,24 @@ type Engram =
|
|
|
2089
2284
|
/// Refusal reason preserved, and it is the sharpest of this family: a masked `[]` reads as a
|
|
2090
2285
|
/// DORMANT engram and corrupts retention math — a fabricated empty here does not just misinform a
|
|
2091
2286
|
/// reader, it feeds a wrong number into a decision about destroying data.
|
|
2092
|
-
listActivitySnapshots: (start: nat, limit: nat) -> (
|
|
2287
|
+
listActivitySnapshots: (start: nat, limit: nat) -> (Result_51) query;
|
|
2288
|
+
/// ⟨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
|
+
/// m."⟩ OWNER-ONLY: what each agent has spent today, beside the daily limit in force for it, so the
|
|
2290
|
+
/// agent rows can say "$0.50 of $5.00 today" where they said a count of payments. Read from the
|
|
2291
|
+
/// state the payment path already keeps — `outboundSpendToday`, through `SpendCeiling.callerSpentOn`
|
|
2292
|
+
/// (the reader `x402SignFor` uses) — and the limits from `gate.getPolicy(<the agent's key>)`, the
|
|
2293
|
+
/// policy `x402SignFor` checks, on the UTC day it checks (`SpendCeiling.dayIndex`). Amounts are the
|
|
2294
|
+
/// token's minor units, as the record's `amount=` writes them. No new state.
|
|
2295
|
+
///
|
|
2296
|
+
/// OWNER-ONLY for `getSpendCeiling`'s reason: one agent's spending is the owner's custody
|
|
2297
|
+
/// information, and would tell another agent how much it spent. Everyone else — an agent, a
|
|
2298
|
+
/// guardian, a stranger, the anonymous caller — is refused by name (`#Refused
|
|
2299
|
+
/// listAgentSpendToday: …`), never answered with zeros. Paged like `listAgents`, in its order, one
|
|
2300
|
+
/// row per agent record; a row's `spentToday` is null, not 0, where no daily limit is in force,
|
|
2301
|
+
/// because the payment path keeps no figure then (`SpendCeiling.AgentSpendRow` says why).
|
|
2302
|
+
/// WHAT WOULD MAKE THIS WRONG: `x402SignFor` keeping the per-caller total by something other than
|
|
2303
|
+
/// the calling key, or under another day boundary.
|
|
2304
|
+
listAgentSpendToday: (start: nat, limit: nat) -> (Result_50) query;
|
|
2093
2305
|
/// ⟨0.16.0⟩ THE PAGE EXEMPLAR. Trap → `#Refused`, bare array → `Result<Page<T>>` (L1 + L3).
|
|
2094
2306
|
///
|
|
2095
2307
|
/// The refusal prose that used to be `gatedTrap`'s `whyNotEmpty` argument is not lost — it is why
|
|
@@ -2104,7 +2316,7 @@ type Engram =
|
|
|
2104
2316
|
///
|
|
2105
2317
|
/// `withheld` is 0: this roster is owner-only in whole, so there is no partial-visibility case.
|
|
2106
2318
|
/// A method that filters rows by caller sets it — see L1's row-level honesty rule.
|
|
2107
|
-
listAgents: (start: nat, limit: nat) -> (
|
|
2319
|
+
listAgents: (start: nat, limit: nat) -> (Result_49) query;
|
|
2108
2320
|
/// The GUARDIAN-audience projection of the agent roster — three fields, not the full record.
|
|
2109
2321
|
///
|
|
2110
2322
|
/// Two audiences, two methods (L1/L8), rather than one method masking fields by caller: a
|
|
@@ -2116,7 +2328,7 @@ type Engram =
|
|
|
2116
2328
|
/// Refusal reason preserved: `[]` reads as "this engram has no agents", and this is the list a
|
|
2117
2329
|
/// guardian consults BEFORE REVOKING ONE. A fabricated empty here does not merely misinform —
|
|
2118
2330
|
/// it tells someone acting under emergency powers that there is nothing to act on.
|
|
2119
|
-
listAgentsForGuardian: (start: nat, limit: nat) -> (
|
|
2331
|
+
listAgentsForGuardian: (start: nat, limit: nat) -> (Result_48) query;
|
|
2120
2332
|
/// Owner-only: rows carry caller, amount, operation and free-text rationale. The SDK omits it.
|
|
2121
2333
|
///
|
|
2122
2334
|
/// The optional leading filter SURVIVES the L3 reshape — ratified (census tier-2 #8) rather than
|
|
@@ -2129,7 +2341,7 @@ type Engram =
|
|
|
2129
2341
|
///
|
|
2130
2342
|
/// Refusal reason preserved: `[]` reads as "nothing is awaiting the owner's decision".
|
|
2131
2343
|
listApprovalRequests: (statusFilter: opt ApprovalStatus, start: nat,
|
|
2132
|
-
limit: nat) -> (
|
|
2344
|
+
limit: nat) -> (Result_34) query;
|
|
2133
2345
|
/// ⟨0.16.0⟩ `total` IS THE HEAD COUNTER, and on this method that is the entire point.
|
|
2134
2346
|
///
|
|
2135
2347
|
/// The audit log is a bounded RING: it trims its tail, so "rows you can read" and "entries that
|
|
@@ -2163,7 +2375,7 @@ type Engram =
|
|
|
2163
2375
|
/// where this record switched to the hash-first rule. A sealed row costs one SHA-256 of its body
|
|
2164
2376
|
/// at read time; nothing new is stored. WHAT WOULD MAKE THIS WRONG: a sealed row carrying any part
|
|
2165
2377
|
/// of a body, or a stranger reaching `items` (test/record-view.test.mo pins both).
|
|
2166
|
-
listAuditEntries: (start: nat, limit: nat) -> (
|
|
2378
|
+
listAuditEntries: (start: nat, limit: nat) -> (Result_47) query;
|
|
2167
2379
|
/// ⟨0.16.0, L1 + L3 — census-ruled⟩ THE TWO-MECHANISM EXCEPTION DISSOLVES.
|
|
2168
2380
|
///
|
|
2169
2381
|
/// This method used to answer THREE ways to one question: a list, an `#Err` text, and a trap,
|
|
@@ -2187,7 +2399,7 @@ type Engram =
|
|
|
2187
2399
|
/// `dbTypeFilter` DIES on the wire (census). The capability does not: `EngramClient.listBackups`
|
|
2188
2400
|
/// keeps its optional filter and applies it to the page, so no caller loses the ability to ask
|
|
2189
2401
|
/// "backups of this database" — it stops being a thing the canister has to page around.
|
|
2190
|
-
listBackups: (start: nat, limit: nat) -> (
|
|
2402
|
+
listBackups: (start: nat, limit: nat) -> (Result_46) query;
|
|
2191
2403
|
/// List all bearer tokens — Active, Revoked, and Expired. Owner uses this in
|
|
2192
2404
|
/// the dashboard to show installed Connectors (claude.ai, Claude Desktop, etc.).
|
|
2193
2405
|
/// Refusal reason preserved from the trap: `[]` reads as "no connector is installed on this
|
|
@@ -2197,7 +2409,7 @@ type Engram =
|
|
|
2197
2409
|
/// `bearerTokenStore.list()` already resolves each token's status at read time (a token that
|
|
2198
2410
|
/// merely stopped being used is reported `#Expired`, not a stale `#Active`), so the page carries
|
|
2199
2411
|
/// the same honesty the store gained on 2026-08-17.
|
|
2200
|
-
listBearerTokens: (start: nat, limit: nat) -> (
|
|
2412
|
+
listBearerTokens: (start: nat, limit: nat) -> (Result_45) query;
|
|
2201
2413
|
/// The condense checkpoints in the retained log at or above `startSeq`, oldest first.
|
|
2202
2414
|
///
|
|
2203
2415
|
/// ⟨0.16.0, NEW⟩ The other half of the split above. A checkpoint is the only surviving record of a
|
|
@@ -2207,18 +2419,18 @@ type Engram =
|
|
|
2207
2419
|
///
|
|
2208
2420
|
/// Owner-only like every other archive surface, and for the same structural reason: these rows
|
|
2209
2421
|
/// carry the chain positions and roots of entries whose paths were inside the hash preimage.
|
|
2210
|
-
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (
|
|
2422
|
+
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (Result_44) query;
|
|
2211
2423
|
/// ⟨0.16.0⟩ `metrics()` DELETED — absorbed by `about()`.
|
|
2212
2424
|
///
|
|
2213
2425
|
/// Two public projections of one canister (L2.2): `metrics()` and `status()` both answered "what
|
|
2214
2426
|
/// is this engram like" and disagreed on which counters they carried, so a consumer had to fetch
|
|
2215
2427
|
/// both and know which one owned each field. Every field here survives on `about()`, day-flooring
|
|
2216
2428
|
/// included.
|
|
2217
|
-
listCycleSnapshots: (start: nat, limit: nat) -> (
|
|
2429
|
+
listCycleSnapshots: (start: nat, limit: nat) -> (Result_43) query;
|
|
2218
2430
|
/// Same `withheld` treatment as listMemoryFiles — the tombstone listing filtered reserved paths
|
|
2219
2431
|
/// for non-owners just as silently, and a caller could not tell a filtered tombstone list from a
|
|
2220
2432
|
/// complete one. Counted before slicing, so policy-hidden rows never blur into paging.
|
|
2221
|
-
listDeletedMemoryFiles: (start: nat, limit: nat) -> (
|
|
2433
|
+
listDeletedMemoryFiles: (start: nat, limit: nat) -> (Result_42) query;
|
|
2222
2434
|
/// Stays on the engram under B1 (hybrid): withdrawal custody does not leave.
|
|
2223
2435
|
///
|
|
2224
2436
|
/// NAMED item, not a `(Text, Int)` tuple. The Int is an activation time, and a bare Int beside a
|
|
@@ -2233,7 +2445,7 @@ type Engram =
|
|
|
2233
2445
|
/// The item's field is `value`, not `address`: a list may hold a venue value that is no address.
|
|
2234
2446
|
/// Readable by the owner, an active agent or an active guardian, as the old list was.
|
|
2235
2447
|
listEip712Destinations: (typeId: blob, start: nat, limit: nat) ->
|
|
2236
|
-
(
|
|
2448
|
+
(Result_41) query;
|
|
2237
2449
|
/// The registered shapes — E3: encodeTypeString is the display artifact, verbatim.
|
|
2238
2450
|
/// Stays on the engram under B1 (hybrid): EIP-712 signing is custody, and custody does not leave.
|
|
2239
2451
|
///
|
|
@@ -2244,14 +2456,20 @@ type Engram =
|
|
|
2244
2456
|
/// ⟨2026-10-14, the owner's ruling 3A⟩ Each row carries its per-field rules (`fieldRules`), joined in
|
|
2245
2457
|
/// from `eip712FieldRules` — they are part of what the type authorises, so a reader of the list must
|
|
2246
2458
|
/// not have to make a second call to learn them. The row type is `Eip712TypeView`.
|
|
2247
|
-
listEip712Types: (start: nat, limit: nat) -> (
|
|
2459
|
+
listEip712Types: (start: nat, limit: nat) -> (Result_40) query;
|
|
2460
|
+
/// ⟨2026-10-21, round 11 c⟩ Guardians' disputes, oldest first. Same visibility as
|
|
2461
|
+
/// `listRepudiations` and `listRecordNotes`: the owner and ACTIVE guardians read the rows; an
|
|
2462
|
+
/// agent gets an empty page whose `withheld` counts them (ruling 16 B holds — a dispute is the
|
|
2463
|
+
/// guardian's entry, not the agent's); a stranger, a pending guardian and the anonymous caller are
|
|
2464
|
+
/// refused.
|
|
2465
|
+
listGuardianDisputes: (start: nat, limit: nat) -> (Result_39) query;
|
|
2248
2466
|
/// Accessible by owner and guardians.
|
|
2249
2467
|
///
|
|
2250
2468
|
/// Refusal reason carried over from the trap, because it is the sharpest example of why this
|
|
2251
2469
|
/// surface may not fail soft: `[]` reads as "this engram has nobody who can freeze payments or
|
|
2252
2470
|
/// pause writes" — a claim about who can STOP it. A caller who cannot tell that from "you may not
|
|
2253
2471
|
/// see the roster" has been told the engram is unguarded when it may be fully guarded.
|
|
2254
|
-
listGuardians: (start: nat, limit: nat) -> (
|
|
2472
|
+
listGuardians: (start: nat, limit: nat) -> (Result_38) query;
|
|
2255
2473
|
/// The export receipts in the retained log at or above `startSeq`, oldest first.
|
|
2256
2474
|
///
|
|
2257
2475
|
/// ⟨0.16.0, L3⟩ ONE LIST, ONE QUESTION. This method used to return receipts AND checkpoints
|
|
@@ -2267,7 +2485,7 @@ type Engram =
|
|
|
2267
2485
|
///
|
|
2268
2486
|
/// Read `MemoryRouter.ReceiptPage` before reading `page.total` as a receipt count. It is not one;
|
|
2269
2487
|
/// it is the chain's length, and the declaration says why.
|
|
2270
|
-
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (
|
|
2488
|
+
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (Result_37) query;
|
|
2271
2489
|
/// ⟨0.16.0⟩ THE `withheld` EXEMPLAR — L1 names this exact method as the defect it fixes.
|
|
2272
2490
|
///
|
|
2273
2491
|
/// A non-owner's answer silently dropped every `config/` and `secrets/` row. Not "refused the
|
|
@@ -2283,7 +2501,16 @@ type Engram =
|
|
|
2283
2501
|
/// Note the count is computed from the unfiltered list before slicing, so it reports rows hidden
|
|
2284
2502
|
/// by POLICY, never rows merely off the end of this page — those are `total`'s job. Conflating
|
|
2285
2503
|
/// the two would rebuild the ambiguity in a new place.
|
|
2286
|
-
|
|
2504
|
+
///
|
|
2505
|
+
/// ⟨2026-10-21, the owner's round-11 answer k: an author on every file row⟩ Each row also
|
|
2506
|
+
/// carries `lastModifiedBy` (`Types.MemoryFileRow`): the key that wrote the file's current
|
|
2507
|
+
/// version, so a phone's file list can say "changed 2 h ago by Recorder" without a read per
|
|
2508
|
+
/// file. It is what `readMemory` already serves to the same callers under the same gate, so it
|
|
2509
|
+
/// tells no caller anything it could not read. Born `opt` (ADR-0018 rule 1). Looked up only for
|
|
2510
|
+
/// the rows of THIS page (`MemoryRouter.info`), after the slice, so the cost is one lookup per
|
|
2511
|
+
/// row served, never one per file stored. A WIDENED REPLY: a reader that decodes the row by
|
|
2512
|
+
/// position rather than by field name breaks — none in this repository does.
|
|
2513
|
+
listMemoryFiles: (start: nat, limit: nat) -> (Result_36) query;
|
|
2287
2514
|
/// One page of the memory log, seq-ordered, optionally narrowed to one author.
|
|
2288
2515
|
///
|
|
2289
2516
|
/// THE WINDOW IS THE CURSOR, and the page now states it. The window is
|
|
@@ -2309,7 +2536,7 @@ type Engram =
|
|
|
2309
2536
|
/// with the disclosures that make the page verifiable — the hidden-bound defect the census itself
|
|
2310
2537
|
/// names on previewCondense's row.
|
|
2311
2538
|
listMemoryLog: (startSeq: nat, max: nat, authorFilter: opt principal) ->
|
|
2312
|
-
(
|
|
2539
|
+
(Result_35) query;
|
|
2313
2540
|
/// The caller's OWN spend-approval requests. ⟨0.16.0, L1 + L3 — fixed 2026-08-18⟩
|
|
2314
2541
|
///
|
|
2315
2542
|
/// Two defects in seven lines, and the first is the one this release exists to remove:
|
|
@@ -2326,7 +2553,7 @@ type Engram =
|
|
|
2326
2553
|
/// to see, so `total` over their own rows is the honest count and nothing is hidden FROM them.
|
|
2327
2554
|
/// (The unbounded MAP is filed separately — pruning an approval record destroys evidence of what
|
|
2328
2555
|
/// was asked, which is a retention ruling rather than a shape fix.)
|
|
2329
|
-
listMyApprovalRequests: (start: nat, limit: nat) -> (
|
|
2556
|
+
listMyApprovalRequests: (start: nat, limit: nat) -> (Result_34) query;
|
|
2330
2557
|
/// The payer's own sessions, live ones first. PAYER-SCOPED: a caller sees only their own, which
|
|
2331
2558
|
/// is why this needs no role — a session id is not a secret from the person who paid for it.
|
|
2332
2559
|
///
|
|
@@ -2335,7 +2562,7 @@ type Engram =
|
|
|
2335
2562
|
/// It took no arguments, and a cursor added after the freeze is an argument-list change every
|
|
2336
2563
|
/// client would break on — the market paged its own pending withdrawals before its cut for the
|
|
2337
2564
|
/// same reason. The order is the order sessions were opened.
|
|
2338
|
-
listMySessions: (start: nat, limit: nat) -> (
|
|
2565
|
+
listMySessions: (start: nat, limit: nat) -> (Result_33) query;
|
|
2339
2566
|
///
|
|
2340
2567
|
/// ⟨0.16.0, L3⟩ Paged and enveloped like every other `list*`, and the envelope here is uniformity
|
|
2341
2568
|
/// rather than gating: this method cannot refuse anybody, so `#Err` is unreachable on it. That is
|
|
@@ -2348,7 +2575,7 @@ type Engram =
|
|
|
2348
2575
|
/// asked by strangers. `verifyEngramActiveOwner` on the registry answers only about the owner
|
|
2349
2576
|
/// IT recorded, so this chain is what a caller composes with when currency matters — which it
|
|
2350
2577
|
/// cannot do if it needs a role here.
|
|
2351
|
-
listOwnershipTransfers: (start: nat, limit: nat) -> (
|
|
2578
|
+
listOwnershipTransfers: (start: nat, limit: nat) -> (Result_32) query;
|
|
2352
2579
|
/// ⟨2026-09-29, the platform's question from the build review⟩ OWNER-ONLY: how many payment
|
|
2353
2580
|
/// signatures each agent has obtained today, and the daily limit (200, `PaymentSignCap`). The
|
|
2354
2581
|
/// owner's console stated the rule and showed no number, because nothing served one; a number it
|
|
@@ -2364,7 +2591,7 @@ type Engram =
|
|
|
2364
2591
|
/// marketplace's one shared count today is in the reply's `marketplace` field, with the limit this
|
|
2365
2592
|
/// engram enforces for it — beside the agents, never a row among them
|
|
2366
2593
|
/// (`PaymentSignCap.marketplaceRow`). Null when no marketplace is set.
|
|
2367
|
-
listPaymentSignatureCounts: (start: nat, limit: nat) -> (
|
|
2594
|
+
listPaymentSignatureCounts: (start: nat, limit: nat) -> (Result_31) query;
|
|
2368
2595
|
/// Agent records removed by a reset. Each row is a NAMED record with the fields `principal`,
|
|
2369
2596
|
/// `name`, `registeredAt` and `purgedAt` — read them BY NAME, never by position.
|
|
2370
2597
|
/// ⟨2026-09-29, the vocabulary ruling: pairing is the one verb that admits an agent⟩ The field
|
|
@@ -2404,7 +2631,7 @@ type Engram =
|
|
|
2404
2631
|
/// `invite` its enrolment named, and `ended` — why and on what day its engagement ended (its own
|
|
2405
2632
|
/// earlier ending, or the reset) — the facts `resyncAgentEdges` re-sends. The stored rows are
|
|
2406
2633
|
/// served as they are.
|
|
2407
|
-
listPurgedAgents: (start: nat, limit: nat) -> (
|
|
2634
|
+
listPurgedAgents: (start: nat, limit: nat) -> (Result_30) query;
|
|
2408
2635
|
/// ⟨0.16.0⟩ ONE ACCESSOR, folding `readReadLog` and `getDenialLog` — and the fold only became
|
|
2409
2636
|
/// safe because of a change made earlier in this same leg.
|
|
2410
2637
|
///
|
|
@@ -2466,7 +2693,13 @@ type Engram =
|
|
|
2466
2693
|
/// on the chained record — the same `RecordView` filter, and `withheld` counts what it removed
|
|
2467
2694
|
/// together with what `successFilter` removed. WHAT WOULD MAKE THIS WRONG: see `listAuditEntries`.
|
|
2468
2695
|
listReadLog: (successFilter: opt bool, start: nat, limit: nat) ->
|
|
2469
|
-
(
|
|
2696
|
+
(Result_29) query;
|
|
2697
|
+
/// ⟨2026-10-21, round 11 b⟩ The owner's notes, oldest first. Same visibility as
|
|
2698
|
+
/// `listRepudiations`, for the same reason: the owner and ACTIVE guardians read the rows; an agent
|
|
2699
|
+
/// reads only the entries it caused (follow-up 16 B), and every note is the owner's, so an agent
|
|
2700
|
+
/// gets an empty page whose `withheld` counts the notes in its window — never "there are none". A
|
|
2701
|
+
/// stranger, a pending guardian and the anonymous caller are refused.
|
|
2702
|
+
listRecordNotes: (start: nat, limit: nat) -> (Result_28) query;
|
|
2470
2703
|
/// Same visibility as listAuditEntries: the owner, this engram's agents, and ACTIVE guardians
|
|
2471
2704
|
/// see disputes. An unauthorized read REFUSES — it does not return an empty list, because an
|
|
2472
2705
|
/// empty list reads as "no disputes have been filed", which is a claim, not an absence of one.
|
|
@@ -2481,7 +2714,16 @@ type Engram =
|
|
|
2481
2714
|
/// window — which says disputes exist without showing them, never "none have been filed". WHAT
|
|
2482
2715
|
/// WOULD MAKE THIS WRONG: a ruling that an agent may see the disputes of its own writes; this would
|
|
2483
2716
|
/// then have to look up each disputed version's writer, which it does not do today.
|
|
2484
|
-
listRepudiations: (start: nat, limit: nat) -> (
|
|
2717
|
+
listRepudiations: (start: nat, limit: nat) -> (Result_27) query;
|
|
2718
|
+
/// ⟨2026-10-21, the owner's round-11 answer f⟩ OWNER-ONLY: the sign-ins, each with the name its app
|
|
2719
|
+
/// registered. The same tokens, in the same order and paged the same way, as `listBearerTokens`,
|
|
2720
|
+
/// each beside `clientName` — the RFC 7591 `client_name` the app registered when the token was
|
|
2721
|
+
/// issued (`People.SignIn` says when it is null, and that it is the app's own claim). A phone
|
|
2722
|
+
/// owner read "localhost" for every app signed in through a local bridge and could not tell two
|
|
2723
|
+
/// apps apart. A NEW method rather than a field on `BearerToken`: that record is stored (M0170)
|
|
2724
|
+
/// and `listBearerTokens`' reply is shipped (never widened). An agent, a guardian, a stranger and
|
|
2725
|
+
/// the anonymous caller are refused, by `listBearerTokens`' own gate and for its reason.
|
|
2726
|
+
listSignIns: (start: nat, limit: nat) -> (Result_26) query;
|
|
2485
2727
|
/// Owner: advance the review cursor — "I have seen everything up to and including uptoAuditId"
|
|
2486
2728
|
/// (null = everything at the current head). Bounded so the attestation can never cover entries
|
|
2487
2729
|
/// the console did not render; clamped monotonic (the cursor never moves backward) and to the
|
|
@@ -2491,7 +2733,18 @@ type Engram =
|
|
|
2491
2733
|
/// (every family qualifiesForReview admits is written to auditLogger, so they share that space),
|
|
2492
2734
|
/// and this never inspects an operation or a role. Widening what the review shows therefore
|
|
2493
2735
|
/// changes only which ids the console can pass here — it cannot desynchronise the cursor.
|
|
2494
|
-
markAgentWritesReviewed: (uptoAuditId: opt nat) -> (
|
|
2736
|
+
markAgentWritesReviewed: (uptoAuditId: opt nat) -> (Result_13);
|
|
2737
|
+
/// ⟨2026-10-21, the owner's round-11 answer g⟩ AN AGENT READS ITS OWN GRANT — to the calling key
|
|
2738
|
+
/// only (`People.AgentGrant`): what it may read, where it may write, its rate, and the payment
|
|
2739
|
+
/// limits enforced against that key. It reveals nothing a refusal does not already say, and lets
|
|
2740
|
+
/// an agent correct itself before it writes rather than after the owner explains a refusal by
|
|
2741
|
+
/// hand. `getSpendPolicy` and `listAgents` stay owner-only; this answers one row, the caller's.
|
|
2742
|
+
///
|
|
2743
|
+
/// WHO: an ACTIVE agent (`Gated.authorize(#agentOrOwner)`). Refused, each by its own text: the
|
|
2744
|
+
/// owner by name (`People.OWNER_HAS_NO_GRANT`), a revoked or resigned agent ("Agent is revoked" /
|
|
2745
|
+
/// "Agent has resigned" — an ended agent may do nothing, and its old grant would read as powers),
|
|
2746
|
+
/// a guardian and a stranger ("Not authorized"), the anonymous caller. A query: it writes nothing.
|
|
2747
|
+
myGrant: () -> (Result_25) query;
|
|
2495
2748
|
/// The AGENT's current key nominates the key that will replace it. Nothing moves yet: the new
|
|
2496
2749
|
/// key must accept, by its own call, within 24 hours (`acceptAgentKeyNomination`). One pending
|
|
2497
2750
|
/// nomination per agent — a new one replaces the earlier one, and the record says which. Refused,
|
|
@@ -2526,15 +2779,15 @@ type Engram =
|
|
|
2526
2779
|
///
|
|
2527
2780
|
/// WHAT WOULD MAKE THIS WRONG: an await added between `ChildAllowance.take` and the registry call; the
|
|
2528
2781
|
/// registry's `CHILD_MIN_ATTACHED_CYCLES` moving without `CHILD_ATTACH_CYCLES`.
|
|
2529
|
-
openChildEngram: () -> (
|
|
2530
|
-
openSession: (config: SessionConfig, sig: PaymentSignature) -> (
|
|
2782
|
+
openChildEngram: () -> (Result_24);
|
|
2783
|
+
openSession: (config: SessionConfig, sig: PaymentSignature) -> (Result_23);
|
|
2531
2784
|
/// Withdraw tokens to the owner's principal. This is the ONLY way to
|
|
2532
2785
|
/// move tokens out of the engram to an external address, and the
|
|
2533
2786
|
/// destination is always hardcoded to the owner.
|
|
2534
2787
|
/// NOT freeze-gated: the owner always controls their own funds.
|
|
2535
2788
|
/// Guardian freeze only blocks agent/public operations.
|
|
2536
2789
|
ownerWithdraw: (amount: TokenAmount, ownerAuth: opt ActionAuth) ->
|
|
2537
|
-
(
|
|
2790
|
+
(Result_13);
|
|
2538
2791
|
/// ⟨0.16.0⟩ `payRentFromEarnings` DELETED — ruled TWICE (B1 and B2), and it was the single
|
|
2539
2792
|
/// clearest violation of the OSS/platform split in this repo.
|
|
2540
2793
|
///
|
|
@@ -2592,10 +2845,13 @@ type Engram =
|
|
|
2592
2845
|
pairAgent: (arg: record {
|
|
2593
2846
|
code: text;
|
|
2594
2847
|
enrolment: Enrolment;
|
|
2595
|
-
}) -> (
|
|
2848
|
+
}) -> (Result_22);
|
|
2596
2849
|
/// ⟨0.16.0, L2.2 — renamed from `guardianPauseWrites`⟩ Same correction as freezePayments above:
|
|
2597
2850
|
/// owner-or-guardian, and `resumeWrites` never carried the prefix either.
|
|
2598
2851
|
pauseWrites: () -> (Result_1);
|
|
2852
|
+
/// ⟨2026-10-21, the owner's round-11 answer d⟩ `pauseWrites` with a reason; everything said of
|
|
2853
|
+
/// `freezePaymentsWithReason` holds, with `canPauseWrites` as the guardian's grant.
|
|
2854
|
+
pauseWritesWithReason: (reason: text) -> (Result_1);
|
|
2599
2855
|
/// What condensing through `toSeq` would do, and whether it is unlocked. COMMITS NOTHING — it is
|
|
2600
2856
|
/// a query, so it structurally cannot; a preview that wrote would be its own trap.
|
|
2601
2857
|
///
|
|
@@ -2614,7 +2870,7 @@ type Engram =
|
|
|
2614
2870
|
///
|
|
2615
2871
|
/// `unlocked` is the export-receipt gate ONLY. It is not a promise the condense will land: the
|
|
2616
2872
|
/// history-budget delta is checked at commit time and can still refuse a short prefix.
|
|
2617
|
-
previewCondense: (toSeq: nat) -> (
|
|
2873
|
+
previewCondense: (toSeq: nat) -> (Result_21) query;
|
|
2618
2874
|
/// A quote for a session this caller has not opened and is not committed to — the intent a
|
|
2619
2875
|
/// buyer signs against. Pure dry run, no state, no funds.
|
|
2620
2876
|
///
|
|
@@ -2642,6 +2898,27 @@ type Engram =
|
|
|
2642
2898
|
/// ⟨2026-10-02⟩ Answers the house `Types.SessionIntent` — ic402's intent with `expiry` spelled
|
|
2643
2899
|
/// `expiryNs`. Same value, same meaning; only the name carries the unit now.
|
|
2644
2900
|
previewOpenSession: () -> (SessionIntent) query;
|
|
2901
|
+
/// ⟨2026-10-21, the owner's round-11 answer k: a trim preview⟩ What a PROPOSED history policy
|
|
2902
|
+
/// would remove from the store as it stands — "about N old copies in F files would be removed" —
|
|
2903
|
+
/// asked BEFORE the owner saves it. A query: nothing is saved, armed or evicted.
|
|
2904
|
+
///
|
|
2905
|
+
/// WHO: the OWNER only (`#ownerOnly`). An agent, a guardian, a stranger and the anonymous caller
|
|
2906
|
+
/// are each refused with `requireOwner`'s words; the setter it previews is owner-only too.
|
|
2907
|
+
///
|
|
2908
|
+
/// HOW: the proposal must pass the setter's own checks (`retentionEntriesRefusal`), so the preview
|
|
2909
|
+
/// never answers for a policy the setter would refuse. The guards a save would arm are computed
|
|
2910
|
+
/// exactly as the setter computes them (`RetentionPolicy.armGuards`), and each file is planned by
|
|
2911
|
+
/// the planner the sweep executes (`MemoryRouter.previewEviction` → `Retention.plan`), as the
|
|
2912
|
+
/// owner (the sweep's `maintainPrincipal`), AT THE INSTANT its guard lets go — so a rule that
|
|
2913
|
+
/// waits 14 days is counted as it will stand then, when the agent floor has released more. Per
|
|
2914
|
+
/// rule: copies, files, bytes and `notBeforeNs`. The count is "about": writes before the rule
|
|
2915
|
+
/// takes effect change it.
|
|
2916
|
+
/// HONEST WHEN CUT SHORT: `complete = false` when the planning budget
|
|
2917
|
+
/// (`MemoryRouter.PREVIEW_MAX_DROPS`) ran out — the totals are then a floor, and say so.
|
|
2918
|
+
previewRetention: (entries: vec record {
|
|
2919
|
+
text;
|
|
2920
|
+
RetentionClassSpec;
|
|
2921
|
+
}) -> (Result_20) query;
|
|
2645
2922
|
/// Read one memory file at its current version.
|
|
2646
2923
|
///
|
|
2647
2924
|
/// Gated on the `read_memory` permission, so an agent holding that grant reaches it — unlike
|
|
@@ -2656,7 +2933,7 @@ type Engram =
|
|
|
2656
2933
|
/// counter here could never persist; read counting lives on the update path
|
|
2657
2934
|
/// (`sessionReadContext` and the MCP reads). A caller measuring engram usage from this method
|
|
2658
2935
|
/// will measure nothing.
|
|
2659
|
-
readMemory: (path: text) -> (
|
|
2936
|
+
readMemory: (path: text) -> (Result_11) query;
|
|
2660
2937
|
/// Read many paths in one call. Per-path Results are KEPT — partial success is the point, and
|
|
2661
2938
|
/// one unreadable path must not fail the other nine.
|
|
2662
2939
|
///
|
|
@@ -2672,7 +2949,7 @@ type Engram =
|
|
|
2672
2949
|
/// Both are now what they are: a single `#Err` for the whole call. `#Ok` still carries a row per
|
|
2673
2950
|
/// path, each with its own Result — a refused RESERVED path sits beside a readable one, which is
|
|
2674
2951
|
/// a genuine per-path fact.
|
|
2675
|
-
readMemoryBatch: (paths: vec text) -> (
|
|
2952
|
+
readMemoryBatch: (paths: vec text) -> (Result_19) query;
|
|
2676
2953
|
/// ⟨0.16.0⟩ `getMemoryRetentionGuards` DELETED — folded into `getMemoryRetentionPolicy` above.
|
|
2677
2954
|
/// It was the second L2.1 array-returning `get*`, and separating it from the policy it modifies
|
|
2678
2955
|
/// was the defect described there. Its own docs are preserved at the fold site.
|
|
@@ -2683,7 +2960,7 @@ type Engram =
|
|
|
2683
2960
|
/// see it cannot know whether it has the whole range, which is how silent truncation gets
|
|
2684
2961
|
/// reintroduced. Loop while `more` is true, advancing by the bytes actually returned.
|
|
2685
2962
|
readMemoryBytes: (path: text, offset: nat, len: nat, version: opt nat) ->
|
|
2686
|
-
(
|
|
2963
|
+
(Result_18) query;
|
|
2687
2964
|
/// The escrow exit for a session whose settle cannot pay.
|
|
2688
2965
|
///
|
|
2689
2966
|
/// PAYER-ONLY, enforced inside the gateway, and deliberately not owner-triggered: the payer's own
|
|
@@ -2746,7 +3023,7 @@ type Engram =
|
|
|
2746
3023
|
/// was the block index alone, which read as the amount. If the session's record is removed before
|
|
2747
3024
|
/// the amount can be read back — a session closed in the same moment as the recovery and cleaned up
|
|
2748
3025
|
/// during its transfer — it answers `#Other` naming the block, never a guessed amount.
|
|
2749
|
-
recoverEscrow: (sessionId: text, amountE6: nat) -> (
|
|
3026
|
+
recoverEscrow: (sessionId: text, amountE6: nat) -> (Result_17);
|
|
2750
3027
|
/// ⟨0.16.0, L1⟩ A REDEMPTION PATH, where the arm choice is a disclosure decision.
|
|
2751
3028
|
///
|
|
2752
3029
|
/// Four of these refusals are about the CODE and one is about the caller. The code arms restate
|
|
@@ -2760,7 +3037,7 @@ type Engram =
|
|
|
2760
3037
|
/// rather than `()`. The new guardian learns, in the same reply, the name and permissions the
|
|
2761
3038
|
/// owner's invite gave them and that they cannot act until approved; before, that took a second
|
|
2762
3039
|
/// read they had no reason to know to make.
|
|
2763
|
-
registerGuardian: (code: text) -> (
|
|
3040
|
+
registerGuardian: (code: text) -> (Result_16);
|
|
2764
3041
|
/// Remove a per-caller override so that caller reverts to — and keeps TRACKING — the global caps.
|
|
2765
3042
|
///
|
|
2766
3043
|
/// It travels with its pair and is never dropped alone: without it the only way "back" from an
|
|
@@ -2791,11 +3068,22 @@ type Engram =
|
|
|
2791
3068
|
/// `#NotFound` rather than `#Refused` when there is no such guardian: only the owner reaches this
|
|
2792
3069
|
/// line, so the roster is theirs and its contents are not a secret being withheld from them.
|
|
2793
3070
|
removeGuardian: (guardianPrincipal: principal) -> (Result_1);
|
|
3071
|
+
/// ⟨2026-10-21, the owner's round-11 answer a⟩ OWNER-ONLY: give an agent a new name. A name was
|
|
3072
|
+
/// fixed at the invite, and two agents both called "agent" is how the 2026-10-20 session started.
|
|
3073
|
+
/// Only the VALUE of the stored `AgentRecord.name` changes — no new state, no reshaped record —
|
|
3074
|
+
/// and the change is on the record as `agent.rename` (`principal=<key> name=<new name>`, the name
|
|
3075
|
+
/// last). An ended agent may be renamed too (`People.renameTarget` says why).
|
|
3076
|
+
/// Refused: an agent (itself included), a guardian and a stranger by `requireOwner`'s "Not owner",
|
|
3077
|
+
/// the anonymous caller by its own text; a name that is empty, over `MAX_NAME_LENGTH` or holds a
|
|
3078
|
+
/// line break is `#Invalid` (`People.nameRefusal`); an unknown key is `#NotFound`; the agent's
|
|
3079
|
+
/// current name is `#Conflict`. Nothing changes on any refusal. Not alerted: the owner is the one
|
|
3080
|
+
/// renaming (`ActionAlerts.classify` answers null for `agent.rename`).
|
|
3081
|
+
renameAgent: (agentPrincipal: principal, name: text) -> (Result_1);
|
|
2794
3082
|
/// Owner disavows a specific memory write, in the open. Marks — never deletes: the content and
|
|
2795
3083
|
/// the original audit entry stay exactly where they were; this appends a chained
|
|
2796
3084
|
/// `memory.repudiate` entry and lists the (path, version) so readers can see the dispute.
|
|
2797
3085
|
repudiateMemoryWrite: (path: text, version: nat, reason: text) ->
|
|
2798
|
-
(
|
|
3086
|
+
(Result_13);
|
|
2799
3087
|
/// ⚠ OWNER-ONLY BULK RESET. Destructive, and wider than its name suggests.
|
|
2800
3088
|
///
|
|
2801
3089
|
/// It severs EVERY grant surface that can outlive a role — agents, guardians, invites and
|
|
@@ -2823,7 +3111,7 @@ type Engram =
|
|
|
2823
3111
|
/// NOT unbounded. It caps at MAX_ENTRIES and trims its oldest tenth on overflow, so on any engram
|
|
2824
3112
|
/// long-lived enough for the rent model to apply, the reset entry is not guaranteed to still be
|
|
2825
3113
|
/// there. `agentPurgeLog` is the evidence that does not age out — which is why it exists.
|
|
2826
|
-
resetEngram: () -> (
|
|
3114
|
+
resetEngram: () -> (Result_15);
|
|
2827
3115
|
/// ⟨2026-09-28, owner decision: an agent can resign from an engram, and the resignation is
|
|
2828
3116
|
/// recorded⟩ The AGENT ends its own engagement with this engram.
|
|
2829
3117
|
///
|
|
@@ -2869,7 +3157,7 @@ type Engram =
|
|
|
2869
3157
|
/// all that is left to send is the ending, and the registry has nothing to end. The report lists
|
|
2870
3158
|
/// each such engagement under `cannotBeRecorded` (key, root, invite, and how and when it ended),
|
|
2871
3159
|
/// apart from `notRecorded`, so the owner sees them rather than silence.
|
|
2872
|
-
resyncAgentEdges: () -> (
|
|
3160
|
+
resyncAgentEdges: () -> (Result_14);
|
|
2873
3161
|
/// Return to managed custody: the engram adds the registry back as a controller ALONGSIDE the
|
|
2874
3162
|
/// owner — it does not remove the owner. The inverse of `claimSovereignty`, and the reason
|
|
2875
3163
|
/// sovereignty is not a one-way door.
|
|
@@ -2923,7 +3211,7 @@ type Engram =
|
|
|
2923
3211
|
/// written, and only then does it await one notification per revoked agent. So a notification
|
|
2924
3212
|
/// that fails leaves the agents revoked here regardless — a partial notify is not a partial
|
|
2925
3213
|
/// revocation, which is the direction that matters for a panic button.
|
|
2926
|
-
revokeAllAgents: () -> (
|
|
3214
|
+
revokeAllAgents: () -> (Result_13);
|
|
2927
3215
|
/// Owner-only panic button: revoke every connector bearer token at once. Returns how many.
|
|
2928
3216
|
///
|
|
2929
3217
|
/// The THIRD independent surface — hosted connectors authenticate with bearer tokens, not with
|
|
@@ -2932,7 +3220,7 @@ type Engram =
|
|
|
2932
3220
|
/// holding a live session.
|
|
2933
3221
|
///
|
|
2934
3222
|
/// Tokens are re-issuable: revoking them is not permanent the way revoking an agent is.
|
|
2935
|
-
revokeAllBearerTokens: () -> (
|
|
3223
|
+
revokeAllBearerTokens: () -> (Result_13);
|
|
2936
3224
|
/// ⟨0.16.0⟩ `removeAllGuardians` DELETED — test-only (L6), and verified NOT part of KILL-SWITCH's
|
|
2937
3225
|
/// mass-revoke set. The destructive phase-07 suite iterates `removeGuardian` instead, so nothing
|
|
2938
3226
|
/// loses a capability: what dies is a bulk spelling no runbook ever invoked.
|
|
@@ -2944,7 +3232,7 @@ type Engram =
|
|
|
2944
3232
|
///
|
|
2945
3233
|
/// Unlike revoking an agent, this costs nothing permanently — an invite is a one-time code,
|
|
2946
3234
|
/// so voiding it and minting a fresh one is the ordinary path.
|
|
2947
|
-
revokeAllInvites: () -> (
|
|
3235
|
+
revokeAllInvites: () -> (Result_13);
|
|
2948
3236
|
/// Revoke a bearer token by its public tokenId. Idempotent.
|
|
2949
3237
|
/// Subsequent /mcp requests using this token will be rejected.
|
|
2950
3238
|
revokeBearerToken: (tokenId: text) -> (Result_1);
|
|
@@ -3014,7 +3302,7 @@ type Engram =
|
|
|
3014
3302
|
/// ⚠ RAW STORED BYTES, like `readMemoryBatch`. On a Private (encrypted) engram the content is
|
|
3015
3303
|
/// CIPHERTEXT; the key-holding SDK decrypts it. A caller without the key gets bytes it cannot
|
|
3016
3304
|
/// read, not an error.
|
|
3017
|
-
sessionReadContext: (clientLabel: text) -> (
|
|
3305
|
+
sessionReadContext: (clientLabel: text) -> (Result_12);
|
|
3018
3306
|
/// Read one memory file against a PAID x402 session voucher. No role, no invite — the voucher is
|
|
3019
3307
|
/// the authorization, which is what makes this the engram's one rail a stranger can pay to use.
|
|
3020
3308
|
///
|
|
@@ -3044,7 +3332,7 @@ type Engram =
|
|
|
3044
3332
|
/// session must not be the side door: without this guard a stranger holding a fraction-of-a-
|
|
3045
3333
|
/// cent voucher could read `secrets/*`.
|
|
3046
3334
|
/// · Payments are frozen on this engram.
|
|
3047
|
-
sessionReadMemory: (voucher: Voucher, path: text) -> (
|
|
3335
|
+
sessionReadMemory: (voucher: Voucher, path: text) -> (Result_11);
|
|
3048
3336
|
/// Configure action alerts: an https webhook that receives new chained-audit entries matching the
|
|
3049
3337
|
/// enabled event classes (money / approvals / guardian / agentWrites), batched, at most one
|
|
3050
3338
|
/// POST per minute. Owner-only. Payloads carry audit METADATA (operation, caller, role, bounded
|
|
@@ -3084,7 +3372,13 @@ type Engram =
|
|
|
3084
3372
|
/// called it an "ops floor: retention enforcement deletes owner backup data silently", mitigated
|
|
3085
3373
|
/// by a `Debug.print` nobody reads. An owner lowering the cap is destroying their own backups;
|
|
3086
3374
|
/// they are told how many, in the reply and in the audit line.
|
|
3087
|
-
|
|
3375
|
+
///
|
|
3376
|
+
/// ⟨2026-10-21, the owner's round-11 answers h and m⟩ The number now bounds EACH creator's
|
|
3377
|
+
/// backups of the kind (`Backup.enforceRetention`): an agent's finalize prunes only that agent's
|
|
3378
|
+
/// own, and this setter applies the number to every creator's set, so `prunedBackups` counts
|
|
3379
|
+
/// across all of them. "The write is the read" above went stale for a second phone, which never
|
|
3380
|
+
/// made the write: `getBackupRetention` is the read.
|
|
3381
|
+
setBackupRetention: (dbType: text, maxBackups: nat) -> (Result_10);
|
|
3088
3382
|
/// Override the caps for ONE caller — an agent this owner trusts more, or less, than the rest.
|
|
3089
3383
|
setCallerSpendPolicy: (caller: principal, policy: SpendingPolicy) ->
|
|
3090
3384
|
(Result_1);
|
|
@@ -3138,7 +3432,12 @@ type Engram =
|
|
|
3138
3432
|
/// the guardian honesty rail: integrity, not content). Active guardians only. Arming starts
|
|
3139
3433
|
/// from NOW (no history replay); url = null disarms and frees the slot.
|
|
3140
3434
|
setGuardianAlertConfig: (cfg: AlertConfig) -> (Result_1);
|
|
3141
|
-
/// Per-prefix retention policy.
|
|
3435
|
+
/// Per-prefix retention policy. The longest rule that covers a path wins; anything uncovered
|
|
3436
|
+
/// keeps everything.
|
|
3437
|
+
///
|
|
3438
|
+
/// ⟨2026-10-21, the owner's round-11 answer i⟩ "Covers" is the folder matcher
|
|
3439
|
+
/// (`AgentPaths.covers`, through `RetentionPolicy.resolve`): a rule ending in "/" governs
|
|
3440
|
+
/// everything beneath it, any other rule exactly one path. It was bare text prefix until that day.
|
|
3142
3441
|
///
|
|
3143
3442
|
/// A CHANGE does not take effect immediately, in EITHER direction: every prefix whose EFFECTIVE
|
|
3144
3443
|
/// class moves is guarded for the same window as the agent floor, so history cannot be
|
|
@@ -3315,7 +3614,7 @@ type Engram =
|
|
|
3315
3614
|
maxFeePerGas: nat;
|
|
3316
3615
|
maxPriorityFeePerGas: nat;
|
|
3317
3616
|
nonce: nat;
|
|
3318
|
-
}) -> (
|
|
3617
|
+
}) -> (Result_9);
|
|
3319
3618
|
/// Sign an EIP-3009 authorization for x402 payment. Agent-accessible.
|
|
3320
3619
|
/// Client probes the URL, extracts chain/token/recipient/amount from the 402, and calls this.
|
|
3321
3620
|
/// Canister signs → returns header → client retries with header.
|
|
@@ -3347,6 +3646,26 @@ type Engram =
|
|
|
3347
3646
|
tokenName: text;
|
|
3348
3647
|
tokenVersion: text;
|
|
3349
3648
|
}) -> (Result_3);
|
|
3649
|
+
/// ⟨2026-10-21, the owner's round-11 answer e⟩ A GUARDIAN STEPS DOWN: the caller ends their own
|
|
3650
|
+
/// guardianship of this engram. It removes a power from the one who holds it and grants none.
|
|
3651
|
+
/// Before, only the owner could remove a guardian, so one who wanted out could only stop watching
|
|
3652
|
+
/// without anyone knowing — worse than an honest exit on the record.
|
|
3653
|
+
///
|
|
3654
|
+
/// WHO: anyone holding a guardian record here, `#Pending` or `#Active`; never refused for the
|
|
3655
|
+
/// record's state. The owner is refused by name (`People.OWNER_IS_NO_GUARDIAN`: their way is
|
|
3656
|
+
/// `removeGuardian`); an agent or a stranger is `#NotFound` (`People.NOT_A_GUARDIAN`, a fact about
|
|
3657
|
+
/// the caller told to the caller, as `resignAgent` does); the anonymous caller is refused.
|
|
3658
|
+
///
|
|
3659
|
+
/// WHAT IT RECORDS: one `guardian.stepDown` entry under `#Guardian`
|
|
3660
|
+
/// (`principal=<key> was=active|pending name=<name>`). Being a `guardian.*` operation it reaches
|
|
3661
|
+
/// the owner's and the other guardians' alerts in the #guardian class, on by default, and the
|
|
3662
|
+
/// guardian who left gets one farewell delivery before their channel goes (the drain's lazy
|
|
3663
|
+
/// cleanup in `drainActionAlerts`, as for a removed guardian).
|
|
3664
|
+
///
|
|
3665
|
+
/// WHAT IT LEAVES: a brake this guardian pulled stays on — lifting one is the owner's; their
|
|
3666
|
+
/// disputes stay on the record. Like `removeGuardian`, it is not terminal: the owner may invite
|
|
3667
|
+
/// the same person again.
|
|
3668
|
+
stepDownAsGuardian: () -> (Result_1);
|
|
3350
3669
|
/// OWNER force-close, for a session the payer abandoned.
|
|
3351
3670
|
///
|
|
3352
3671
|
/// ⟨R1b, ruled 2026-08-26: owner-gated, NO guardian.⟩ It moves someone else's money, and only ever
|
|
@@ -3383,7 +3702,7 @@ type Engram =
|
|
|
3383
3702
|
/// owner can see every time the reader read. A refusal is `#Refused` naming this method and the
|
|
3384
3703
|
/// class (`SeatWeeks.readRefusal`), never an empty list: an empty list is a real answer ("no agent
|
|
3385
3704
|
/// has paired here"), and a fabricated one would be counted as one.
|
|
3386
|
-
sysGetAgentSeatWeeks: () -> (
|
|
3705
|
+
sysGetAgentSeatWeeks: () -> (Result_8);
|
|
3387
3706
|
/// The metrics reader the registry designated reads this engram's paid-rail health, in one call:
|
|
3388
3707
|
/// the balance and the line it must stay above, the memory that line is computed from, the sessions
|
|
3389
3708
|
/// by state, the escrow open sessions hold, the vouchers spent and the refused ones
|
|
@@ -3405,7 +3724,7 @@ type Engram =
|
|
|
3405
3724
|
/// (`RailHealth.readRefusal`), never a zero balance: a made-up zero would read as an engram about
|
|
3406
3725
|
/// to freeze. Called by another canister, a query runs replicated and this engram pays for it —
|
|
3407
3726
|
/// a few million cycles an hour, the cost of being watched.
|
|
3408
|
-
sysGetRailHealth: () -> (
|
|
3727
|
+
sysGetRailHealth: () -> (Result_7) query;
|
|
3409
3728
|
/// The cashier reads how many signatures this engram has produced, per caller and in total.
|
|
3410
3729
|
/// ⟨2026-09-28⟩ The owner's decision of that date: a running counter on the engram, exported to
|
|
3411
3730
|
/// the cashier — and to nobody else (`AccessControl.requireCashierForSignatureCounts`).
|
|
@@ -3428,7 +3747,20 @@ type Engram =
|
|
|
3428
3747
|
/// bills from this: the number comes from a canister its owner controls and can reinstall, so bill
|
|
3429
3748
|
/// only engrams the registry confirms run published code, and read a lower count than last time as
|
|
3430
3749
|
/// a reinstall — the reasoning is at `signaturesByCaller`.
|
|
3431
|
-
sysGetSignatureCounts: () -> (
|
|
3750
|
+
sysGetSignatureCounts: () -> (Result_6);
|
|
3751
|
+
/// Note a restart the registry just made: what this engram owes for it, the floor a repayment may
|
|
3752
|
+
/// not go under, and until when to keep its timers quiet.
|
|
3753
|
+
///
|
|
3754
|
+
/// CALLER: the registry that spawned this engram, from inside its owner's `restartMyStoppedEngram`,
|
|
3755
|
+
/// and nobody else (ADR-0020) — the same authority as `sysSetBillerId`. The owner's next conversion
|
|
3756
|
+
/// that lands pays the loan back first. The loan is capped at `RestartRepay.LOAN_MAX_CYCLES` and
|
|
3757
|
+
/// the quiet window at 30 minutes, whatever the registry says.
|
|
3758
|
+
sysNoteRestart: (r:
|
|
3759
|
+
record {
|
|
3760
|
+
keepCycles: nat;
|
|
3761
|
+
loan: nat;
|
|
3762
|
+
quietUntilNs: int;
|
|
3763
|
+
}) -> (Result_1);
|
|
3432
3764
|
/// Rent lifecycle notice — how the OWNER (not the agent) learns their subscription lapsed. D6
|
|
3433
3765
|
/// shipped the handoff but every alarm it added talks to the operating service's watchdog; the
|
|
3434
3766
|
/// doc named the debt plainly: "an owner learns of their own lapse only by looking." This closes
|
|
@@ -3507,6 +3839,28 @@ type Engram =
|
|
|
3507
3839
|
paidThroughNs: opt int;
|
|
3508
3840
|
scheduleVersion: opt text;
|
|
3509
3841
|
}) -> (Result_1);
|
|
3842
|
+
/// Give back what a paid security update advanced this engram and the install did not use.
|
|
3843
|
+
///
|
|
3844
|
+
/// CALLER: the registry that spawned this engram, right after it installed a security update it
|
|
3845
|
+
/// paid for, and nobody else (ADR-0020). Sends the smallest of: the advance, what this engram holds
|
|
3846
|
+
/// above its balance before the update, and what sits above its 30-day reserve plus send headroom
|
|
3847
|
+
/// (`RestartRepay.giveBack`) — attached to the registry's `sysRepayUpgradeAdvance`, which accepts no
|
|
3848
|
+
/// more than it advanced. The registry writes off what is not returned; nothing is owed after.
|
|
3849
|
+
/// ⟨2026-10-26, the owner's review choice 1B: "take back only what we added; anything left over goes
|
|
3850
|
+
/// to the 90-day write-off"⟩ The registry now names the ONE advance it is asking for (`advanceId`,
|
|
3851
|
+
/// the one its deposit for this install put on its ledger) and `advance` is that advance's amount
|
|
3852
|
+
/// alone — never the sum of every advance this engram has out. The engram passes the id back to
|
|
3853
|
+
/// `sysRepayUpgradeAdvance` unchanged, and the registry settles that advance only. The engram's own
|
|
3854
|
+
/// caps are unchanged (`RestartRepay.giveBack`). HONEST LIMIT, unchanged by 1B: the engram cannot
|
|
3855
|
+
/// tell its owner's top-up from the unused advance, so when the install used part of the advance and
|
|
3856
|
+
/// the owner added compute meanwhile, up to the part the install used can still come from the
|
|
3857
|
+
/// owner's top-up (the cap is the advance, not its unused part).
|
|
3858
|
+
sysReturnUpgradeAdvance: (a:
|
|
3859
|
+
record {
|
|
3860
|
+
advance: nat;
|
|
3861
|
+
advanceId: nat;
|
|
3862
|
+
balanceBefore: nat;
|
|
3863
|
+
}) -> (Result_5);
|
|
3510
3864
|
/// Point this engram at the biller that converts its tokens → cycles. Settable, not hardcoded:
|
|
3511
3865
|
/// coupling is by principal id, so the same wasm runs against any deployment's biller.
|
|
3512
3866
|
///
|
|
@@ -3523,6 +3877,21 @@ type Engram =
|
|
|
3523
3877
|
/// nobody but the spawning registry can fix it. That refusal therefore names the real remedy
|
|
3524
3878
|
/// rather than telling an owner to run a call they can no longer make.
|
|
3525
3879
|
sysSetBillerId: (id: principal) -> (Result_1);
|
|
3880
|
+
/// Give this engram its BIRTH CHAIN: its ancestors' birth records and its own, root first, its own
|
|
3881
|
+
/// last ⟨2026-10-26, the owner's lineage rulings L2C-lite and L3A⟩.
|
|
3882
|
+
///
|
|
3883
|
+
/// CALLER: the registry that spawned this engram, from its birth push or its sweep's retry, and
|
|
3884
|
+
/// nobody else (ADR-0020) — the same authority as `sysSetBillerId`, through the named gate
|
|
3885
|
+
/// `AccessControl.requireSpawningRegistry`. ⚠ THE REGISTRY'S CLIENT DECLARATION IS HAND-WRITTEN
|
|
3886
|
+
/// (`sysSetBirthChain : ([BirthRecord.BirthRecord]) -> async Wire.Result<()>`, in `mintAndPush`): a
|
|
3887
|
+
/// different reply type here traps inside the registry's callback, and a different name leaves every
|
|
3888
|
+
/// newborn without its record, silently retried. test/lineage-wiring.test.ts holds the two equal.
|
|
3889
|
+
///
|
|
3890
|
+
/// SET ONCE: the same chain again answers `#Ok` and changes nothing (the registry's sweep may re-send
|
|
3891
|
+
/// a push whose reply was lost); a different one is refused `#Conflict`. THE ENGRAM DOES NOT HASH:
|
|
3892
|
+
/// it checks only that the chain ends with its own record. The fingerprints are the registry's to
|
|
3893
|
+
/// certify and the client's `verifyBirthChain` to check.
|
|
3894
|
+
sysSetBirthChain: (chain: vec BirthRecord) -> (Result_1);
|
|
3526
3895
|
/// Point this engram at the commerce satellite allowed to ask it for signatures. ⟨0.16.0, B1⟩
|
|
3527
3896
|
///
|
|
3528
3897
|
/// SAME AUTHORITY AS `sysSetBillerId`, and for a stronger reason. That one routes money; this one
|
|
@@ -3549,7 +3918,10 @@ type Engram =
|
|
|
3549
3918
|
/// A CANISTER ONLY: a person's principal, the anonymous principal or the management canister is
|
|
3550
3919
|
/// refused `#Invalid` and nothing changes — a person named here would be handed this engram's seat
|
|
3551
3920
|
/// counts. Set or replaced, never cleared: the owner's control is the switch
|
|
3552
|
-
/// (`setSeatWeeksReadEnabled`), not the pointer.
|
|
3921
|
+
/// (`setSeatWeeksReadEnabled`), not the pointer.
|
|
3922
|
+
/// ⟨CORRECTED 2026-10-26, the owner's lineage ruling L6A⟩ "Set or replaced" is no longer true: it is
|
|
3923
|
+
/// SET ONCE. The same reader again answers `#Ok` and changes nothing; another is refused `#Conflict`
|
|
3924
|
+
/// (`AccessControl.setOnce` says why). Still never cleared. The chained record entry
|
|
3553
3925
|
/// (`metrics.sysSetMetricsReaderId`) is the evidence of when the read was granted, and to whom.
|
|
3554
3926
|
sysSetMetricsReaderId: (reader: principal) -> (Result_1);
|
|
3555
3927
|
/// The market asks this engram to sign a registered type — B1's seam, settlement leg. ⟨0.16.0⟩
|
|
@@ -3828,7 +4200,7 @@ type ChildAllowanceRow =
|
|
|
3828
4200
|
type CheckpointPage =
|
|
3829
4201
|
record {
|
|
3830
4202
|
firstAvailableSeq: nat;
|
|
3831
|
-
page:
|
|
4203
|
+
page: Page_18;
|
|
3832
4204
|
scannedThroughSeq: nat;
|
|
3833
4205
|
};
|
|
3834
4206
|
type CertifiedAuditHead =
|
|
@@ -3846,6 +4218,38 @@ type CallerSignatureCount =
|
|
|
3846
4218
|
role: Role;
|
|
3847
4219
|
root: opt principal;
|
|
3848
4220
|
};
|
|
4221
|
+
type Brakes =
|
|
4222
|
+
record {
|
|
4223
|
+
payments: BrakeState;
|
|
4224
|
+
writes: BrakeState;
|
|
4225
|
+
};
|
|
4226
|
+
type BrakeState =
|
|
4227
|
+
record {
|
|
4228
|
+
on: bool;
|
|
4229
|
+
pull: opt BrakePull;
|
|
4230
|
+
};
|
|
4231
|
+
type BrakeRole =
|
|
4232
|
+
variant {
|
|
4233
|
+
Guardian;
|
|
4234
|
+
Owner;
|
|
4235
|
+
};
|
|
4236
|
+
type BrakePull =
|
|
4237
|
+
record {
|
|
4238
|
+
atNs: int;
|
|
4239
|
+
by: principal;
|
|
4240
|
+
reason: opt text;
|
|
4241
|
+
role: BrakeRole;
|
|
4242
|
+
};
|
|
4243
|
+
type BirthRecord =
|
|
4244
|
+
record {
|
|
4245
|
+
bornAtNs: int;
|
|
4246
|
+
child: principal;
|
|
4247
|
+
number: nat;
|
|
4248
|
+
parent: opt principal;
|
|
4249
|
+
parentFingerprint: opt blob;
|
|
4250
|
+
secret: blob;
|
|
4251
|
+
version: nat;
|
|
4252
|
+
};
|
|
3849
4253
|
type BearerTokenStatus =
|
|
3850
4254
|
variant {
|
|
3851
4255
|
Active;
|
|
@@ -3890,6 +4294,12 @@ type BackupRetentionReport =
|
|
|
3890
4294
|
maxBackups: nat;
|
|
3891
4295
|
prunedBackups: nat;
|
|
3892
4296
|
};
|
|
4297
|
+
type BackupRetention =
|
|
4298
|
+
record {
|
|
4299
|
+
dbType: text;
|
|
4300
|
+
isDefault: bool;
|
|
4301
|
+
maxBackups: nat;
|
|
4302
|
+
};
|
|
3893
4303
|
type BackupMetadata =
|
|
3894
4304
|
record {
|
|
3895
4305
|
backupId: text;
|
|
@@ -4008,6 +4418,18 @@ type AgentStatus =
|
|
|
4008
4418
|
Resigned;
|
|
4009
4419
|
Revoked;
|
|
4010
4420
|
};
|
|
4421
|
+
type AgentSpendToday =
|
|
4422
|
+
record {
|
|
4423
|
+
agents: Page_23;
|
|
4424
|
+
dayStartNs: int;
|
|
4425
|
+
};
|
|
4426
|
+
type AgentSpendRow =
|
|
4427
|
+
record {
|
|
4428
|
+
agent: principal;
|
|
4429
|
+
maxPerDay: opt nat;
|
|
4430
|
+
root: principal;
|
|
4431
|
+
spentToday: opt nat;
|
|
4432
|
+
};
|
|
4011
4433
|
type AgentRecord =
|
|
4012
4434
|
record {
|
|
4013
4435
|
earlierKeys: vec HeldKey;
|
|
@@ -4041,6 +4463,13 @@ type AgentPaymentSignatures =
|
|
|
4041
4463
|
root: principal;
|
|
4042
4464
|
signedToday: nat;
|
|
4043
4465
|
};
|
|
4466
|
+
type AgentGrant =
|
|
4467
|
+
record {
|
|
4468
|
+
key: principal;
|
|
4469
|
+
name: text;
|
|
4470
|
+
paymentLimits: PaymentLimits;
|
|
4471
|
+
permissions: AgentPermissions;
|
|
4472
|
+
};
|
|
4044
4473
|
type AgentEnding =
|
|
4045
4474
|
record {
|
|
4046
4475
|
day: int;
|