@engramx/idl 0.16.0-rc.16 → 0.16.0-rc.18
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 +253 -172
- package/dist/engram.idl.d.ts +246 -170
- package/dist/engram.idl.js +210 -169
- 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
|
@@ -248,227 +248,237 @@ type ResyncReport =
|
|
|
248
248
|
type Result_9 =
|
|
249
249
|
variant {
|
|
250
250
|
Err: Error;
|
|
251
|
-
Ok:
|
|
251
|
+
Ok: SignedTransaction;
|
|
252
252
|
};
|
|
253
|
-
type
|
|
253
|
+
type Result_82 =
|
|
254
254
|
variant {
|
|
255
255
|
Err: Error;
|
|
256
256
|
Ok: AgentRecord;
|
|
257
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;
|
|
267
|
+
};
|
|
258
268
|
type Result_8 =
|
|
259
269
|
variant {
|
|
260
270
|
Err: Error;
|
|
261
|
-
Ok:
|
|
271
|
+
Ok: vec Seat;
|
|
262
272
|
};
|
|
263
273
|
type Result_79 =
|
|
264
274
|
variant {
|
|
265
275
|
Err: Error;
|
|
266
|
-
Ok:
|
|
276
|
+
Ok: CondenseResult;
|
|
267
277
|
};
|
|
268
278
|
type Result_78 =
|
|
269
279
|
variant {
|
|
270
280
|
Err: Error;
|
|
271
|
-
Ok:
|
|
281
|
+
Ok: MemoryRangeExport;
|
|
272
282
|
};
|
|
273
|
-
type
|
|
283
|
+
type Result_76 =
|
|
274
284
|
variant {
|
|
275
285
|
Err: Error;
|
|
276
|
-
Ok:
|
|
286
|
+
Ok: Page_25;
|
|
277
287
|
};
|
|
278
|
-
type
|
|
288
|
+
type Result_75 =
|
|
279
289
|
variant {
|
|
280
290
|
Err: Error;
|
|
281
|
-
Ok:
|
|
291
|
+
Ok: AgentWriteReview;
|
|
282
292
|
};
|
|
283
293
|
type Result_74 =
|
|
284
294
|
variant {
|
|
285
295
|
Err: Error;
|
|
286
|
-
Ok:
|
|
296
|
+
Ok: BackupMetadata;
|
|
287
297
|
};
|
|
288
298
|
type Result_73 =
|
|
289
299
|
variant {
|
|
290
300
|
Err: Error;
|
|
291
|
-
Ok:
|
|
301
|
+
Ok: BackupRetention;
|
|
292
302
|
};
|
|
293
303
|
type Result_72 =
|
|
294
304
|
variant {
|
|
295
305
|
Err: Error;
|
|
296
|
-
Ok:
|
|
306
|
+
Ok: vec BirthRecord;
|
|
297
307
|
};
|
|
298
308
|
type Result_71 =
|
|
299
309
|
variant {
|
|
300
310
|
Err: Error;
|
|
301
|
-
Ok:
|
|
311
|
+
Ok: Brakes;
|
|
302
312
|
};
|
|
303
313
|
type Result_70 =
|
|
304
314
|
variant {
|
|
305
315
|
Err: Error;
|
|
306
|
-
Ok:
|
|
316
|
+
Ok: ChildAllowanceRow;
|
|
307
317
|
};
|
|
308
318
|
type Result_7 =
|
|
309
319
|
variant {
|
|
310
320
|
Err: Error;
|
|
311
|
-
Ok:
|
|
321
|
+
Ok: RailHealth;
|
|
312
322
|
};
|
|
313
323
|
type Result_69 =
|
|
314
324
|
variant {
|
|
315
325
|
Err: Error;
|
|
316
|
-
Ok:
|
|
326
|
+
Ok: ChildOpening;
|
|
317
327
|
};
|
|
318
328
|
type Result_68 =
|
|
319
329
|
variant {
|
|
320
330
|
Err: Error;
|
|
321
|
-
Ok:
|
|
331
|
+
Ok: blob;
|
|
322
332
|
};
|
|
323
333
|
type Result_67 =
|
|
324
334
|
variant {
|
|
325
335
|
Err: Error;
|
|
326
|
-
Ok:
|
|
336
|
+
Ok: EvmAddresses;
|
|
327
337
|
};
|
|
328
338
|
type Result_66 =
|
|
329
339
|
variant {
|
|
330
340
|
Err: Error;
|
|
331
|
-
Ok:
|
|
341
|
+
Ok: AlertStatus;
|
|
332
342
|
};
|
|
333
343
|
type Result_65 =
|
|
334
344
|
variant {
|
|
335
345
|
Err: Error;
|
|
336
|
-
Ok:
|
|
346
|
+
Ok: MemoryHistory;
|
|
337
347
|
};
|
|
338
348
|
type Result_64 =
|
|
339
349
|
variant {
|
|
340
350
|
Err: Error;
|
|
341
|
-
Ok:
|
|
351
|
+
Ok: MemoryRetentionPolicy;
|
|
342
352
|
};
|
|
343
353
|
type Result_63 =
|
|
344
354
|
variant {
|
|
345
355
|
Err: Error;
|
|
346
|
-
Ok:
|
|
356
|
+
Ok: OwnerConsole;
|
|
347
357
|
};
|
|
348
358
|
type Result_62 =
|
|
349
359
|
variant {
|
|
350
360
|
Err: Error;
|
|
351
|
-
Ok:
|
|
361
|
+
Ok: record {paths: vec text;};
|
|
352
362
|
};
|
|
353
363
|
type Result_61 =
|
|
354
364
|
variant {
|
|
355
365
|
Err: Error;
|
|
356
|
-
Ok:
|
|
366
|
+
Ok: SigningFloorStatus;
|
|
357
367
|
};
|
|
358
368
|
type Result_60 =
|
|
359
369
|
variant {
|
|
360
370
|
Err: Error;
|
|
361
|
-
Ok:
|
|
371
|
+
Ok: SpendCeiling;
|
|
362
372
|
};
|
|
363
373
|
type Result_6 =
|
|
364
374
|
variant {
|
|
365
375
|
Err: Error;
|
|
366
|
-
Ok:
|
|
376
|
+
Ok: SignatureCounts;
|
|
367
377
|
};
|
|
368
378
|
type Result_59 =
|
|
369
379
|
variant {
|
|
370
380
|
Err: Error;
|
|
371
|
-
Ok:
|
|
381
|
+
Ok: SpendingPolicy;
|
|
372
382
|
};
|
|
373
383
|
type Result_58 =
|
|
374
384
|
variant {
|
|
375
385
|
Err: Error;
|
|
376
|
-
Ok:
|
|
386
|
+
Ok: StorageReport;
|
|
377
387
|
};
|
|
378
388
|
type Result_57 =
|
|
379
389
|
variant {
|
|
380
390
|
Err: Error;
|
|
381
|
-
Ok:
|
|
391
|
+
Ok: WalletBalances;
|
|
382
392
|
};
|
|
383
393
|
type Result_56 =
|
|
384
394
|
variant {
|
|
385
395
|
Err: Error;
|
|
386
|
-
Ok:
|
|
396
|
+
Ok: WorldIdConfig;
|
|
387
397
|
};
|
|
388
398
|
type Result_55 =
|
|
389
399
|
variant {
|
|
390
400
|
Err: Error;
|
|
391
|
-
Ok:
|
|
401
|
+
Ok: WorldIdRpContext;
|
|
392
402
|
};
|
|
393
403
|
type Result_54 =
|
|
394
404
|
variant {
|
|
395
405
|
Err: Error;
|
|
396
|
-
Ok:
|
|
406
|
+
Ok: opt text;
|
|
397
407
|
};
|
|
398
408
|
type Result_53 =
|
|
399
409
|
variant {
|
|
400
410
|
Err: Error;
|
|
401
|
-
Ok:
|
|
411
|
+
Ok: bool;
|
|
402
412
|
};
|
|
403
413
|
type Result_52 =
|
|
404
414
|
variant {
|
|
405
415
|
Err: Error;
|
|
406
|
-
Ok:
|
|
416
|
+
Ok: text;
|
|
407
417
|
};
|
|
408
418
|
type Result_51 =
|
|
409
419
|
variant {
|
|
410
420
|
Err: Error;
|
|
411
|
-
Ok:
|
|
421
|
+
Ok: Page_24;
|
|
412
422
|
};
|
|
413
423
|
type Result_50 =
|
|
414
424
|
variant {
|
|
415
425
|
Err: Error;
|
|
416
|
-
Ok:
|
|
426
|
+
Ok: AgentSpendToday;
|
|
417
427
|
};
|
|
418
428
|
type Result_5 =
|
|
419
429
|
variant {
|
|
420
430
|
Err: Error;
|
|
421
|
-
Ok:
|
|
431
|
+
Ok: record {returned: nat;};
|
|
422
432
|
};
|
|
423
433
|
type Result_49 =
|
|
424
434
|
variant {
|
|
425
435
|
Err: Error;
|
|
426
|
-
Ok:
|
|
436
|
+
Ok: Page_22;
|
|
427
437
|
};
|
|
428
438
|
type Result_48 =
|
|
429
439
|
variant {
|
|
430
440
|
Err: Error;
|
|
431
|
-
Ok:
|
|
441
|
+
Ok: Page_21;
|
|
432
442
|
};
|
|
433
443
|
type Result_47 =
|
|
434
444
|
variant {
|
|
435
445
|
Err: Error;
|
|
436
|
-
Ok:
|
|
446
|
+
Ok: RecordPage;
|
|
437
447
|
};
|
|
438
448
|
type Result_46 =
|
|
439
449
|
variant {
|
|
440
450
|
Err: Error;
|
|
441
|
-
Ok:
|
|
451
|
+
Ok: Page_20;
|
|
442
452
|
};
|
|
443
453
|
type Result_45 =
|
|
444
454
|
variant {
|
|
445
455
|
Err: Error;
|
|
446
|
-
Ok:
|
|
456
|
+
Ok: Page_19;
|
|
447
457
|
};
|
|
448
458
|
type Result_44 =
|
|
449
459
|
variant {
|
|
450
460
|
Err: Error;
|
|
451
|
-
Ok:
|
|
461
|
+
Ok: CheckpointPage;
|
|
452
462
|
};
|
|
453
463
|
type Result_43 =
|
|
454
464
|
variant {
|
|
455
465
|
Err: Error;
|
|
456
|
-
Ok:
|
|
466
|
+
Ok: Page_17;
|
|
457
467
|
};
|
|
458
468
|
type Result_42 =
|
|
459
469
|
variant {
|
|
460
470
|
Err: Error;
|
|
461
|
-
Ok:
|
|
471
|
+
Ok: Page_16;
|
|
462
472
|
};
|
|
463
473
|
type Result_41 =
|
|
464
474
|
variant {
|
|
465
475
|
Err: Error;
|
|
466
|
-
Ok:
|
|
476
|
+
Ok: Page_15;
|
|
467
477
|
};
|
|
468
478
|
type Result_40 =
|
|
469
479
|
variant {
|
|
470
480
|
Err: Error;
|
|
471
|
-
Ok:
|
|
481
|
+
Ok: Page_14;
|
|
472
482
|
};
|
|
473
483
|
type Result_4 =
|
|
474
484
|
variant {
|
|
@@ -478,52 +488,52 @@ type Result_4 =
|
|
|
478
488
|
type Result_39 =
|
|
479
489
|
variant {
|
|
480
490
|
Err: Error;
|
|
481
|
-
Ok:
|
|
491
|
+
Ok: Page_13;
|
|
482
492
|
};
|
|
483
493
|
type Result_38 =
|
|
484
494
|
variant {
|
|
485
495
|
Err: Error;
|
|
486
|
-
Ok:
|
|
496
|
+
Ok: Page_12;
|
|
487
497
|
};
|
|
488
498
|
type Result_37 =
|
|
489
499
|
variant {
|
|
490
500
|
Err: Error;
|
|
491
|
-
Ok:
|
|
501
|
+
Ok: ReceiptPage;
|
|
492
502
|
};
|
|
493
503
|
type Result_36 =
|
|
494
504
|
variant {
|
|
495
505
|
Err: Error;
|
|
496
|
-
Ok:
|
|
506
|
+
Ok: Page_10;
|
|
497
507
|
};
|
|
498
508
|
type Result_35 =
|
|
499
509
|
variant {
|
|
500
510
|
Err: Error;
|
|
501
|
-
Ok:
|
|
511
|
+
Ok: LogPage;
|
|
502
512
|
};
|
|
503
513
|
type Result_34 =
|
|
504
514
|
variant {
|
|
505
515
|
Err: Error;
|
|
506
|
-
Ok:
|
|
516
|
+
Ok: Page_8;
|
|
507
517
|
};
|
|
508
518
|
type Result_33 =
|
|
509
519
|
variant {
|
|
510
520
|
Err: Error;
|
|
511
|
-
Ok:
|
|
521
|
+
Ok: Page_7;
|
|
512
522
|
};
|
|
513
523
|
type Result_32 =
|
|
514
524
|
variant {
|
|
515
525
|
Err: Error;
|
|
516
|
-
Ok:
|
|
526
|
+
Ok: Page_6;
|
|
517
527
|
};
|
|
518
528
|
type Result_31 =
|
|
519
529
|
variant {
|
|
520
530
|
Err: Error;
|
|
521
|
-
Ok:
|
|
531
|
+
Ok: PaymentSignatureCounts;
|
|
522
532
|
};
|
|
523
533
|
type Result_30 =
|
|
524
534
|
variant {
|
|
525
535
|
Err: Error;
|
|
526
|
-
Ok:
|
|
536
|
+
Ok: Page_4;
|
|
527
537
|
};
|
|
528
538
|
type Result_3 =
|
|
529
539
|
variant {
|
|
@@ -533,52 +543,52 @@ type Result_3 =
|
|
|
533
543
|
type Result_29 =
|
|
534
544
|
variant {
|
|
535
545
|
Err: Error;
|
|
536
|
-
Ok:
|
|
546
|
+
Ok: Page_3;
|
|
537
547
|
};
|
|
538
548
|
type Result_28 =
|
|
539
549
|
variant {
|
|
540
550
|
Err: Error;
|
|
541
|
-
Ok:
|
|
551
|
+
Ok: Page_2;
|
|
542
552
|
};
|
|
543
553
|
type Result_27 =
|
|
544
554
|
variant {
|
|
545
555
|
Err: Error;
|
|
546
|
-
Ok:
|
|
556
|
+
Ok: Page_1;
|
|
547
557
|
};
|
|
548
558
|
type Result_26 =
|
|
549
559
|
variant {
|
|
550
560
|
Err: Error;
|
|
551
|
-
Ok:
|
|
561
|
+
Ok: Page;
|
|
552
562
|
};
|
|
553
563
|
type Result_25 =
|
|
554
564
|
variant {
|
|
555
565
|
Err: Error;
|
|
556
|
-
Ok:
|
|
566
|
+
Ok: AgentGrant;
|
|
557
567
|
};
|
|
558
568
|
type Result_24 =
|
|
559
569
|
variant {
|
|
560
570
|
Err: Error;
|
|
561
|
-
Ok:
|
|
571
|
+
Ok: principal;
|
|
562
572
|
};
|
|
563
573
|
type Result_23 =
|
|
564
574
|
variant {
|
|
565
575
|
Err: Error;
|
|
566
|
-
Ok:
|
|
576
|
+
Ok: EngramSessionState;
|
|
567
577
|
};
|
|
568
578
|
type Result_22 =
|
|
569
579
|
variant {
|
|
570
580
|
Err: Error;
|
|
571
|
-
Ok:
|
|
581
|
+
Ok: Pairing;
|
|
572
582
|
};
|
|
573
583
|
type Result_21 =
|
|
574
584
|
variant {
|
|
575
585
|
Err: Error;
|
|
576
|
-
Ok:
|
|
586
|
+
Ok: CondensePreview;
|
|
577
587
|
};
|
|
578
588
|
type Result_20 =
|
|
579
589
|
variant {
|
|
580
590
|
Err: Error;
|
|
581
|
-
Ok:
|
|
591
|
+
Ok: RetentionPreview;
|
|
582
592
|
};
|
|
583
593
|
type Result_2 =
|
|
584
594
|
variant {
|
|
@@ -588,52 +598,52 @@ type Result_2 =
|
|
|
588
598
|
type Result_19 =
|
|
589
599
|
variant {
|
|
590
600
|
Err: Error;
|
|
591
|
-
Ok:
|
|
601
|
+
Ok: vec BatchReadItem;
|
|
592
602
|
};
|
|
593
603
|
type Result_18 =
|
|
594
604
|
variant {
|
|
595
605
|
Err: Error;
|
|
596
|
-
Ok:
|
|
606
|
+
Ok: MemoryByteChunk;
|
|
597
607
|
};
|
|
598
608
|
type Result_17 =
|
|
599
609
|
variant {
|
|
600
610
|
Err: Error;
|
|
601
|
-
Ok:
|
|
611
|
+
Ok: EngramEscrowRecovery;
|
|
602
612
|
};
|
|
603
613
|
type Result_16 =
|
|
604
614
|
variant {
|
|
605
615
|
Err: Error;
|
|
606
|
-
Ok:
|
|
616
|
+
Ok: GuardianRecord;
|
|
607
617
|
};
|
|
608
618
|
type Result_15 =
|
|
609
619
|
variant {
|
|
610
620
|
Err: Error;
|
|
611
|
-
Ok:
|
|
621
|
+
Ok: ResetReport;
|
|
612
622
|
};
|
|
613
623
|
type Result_14 =
|
|
614
624
|
variant {
|
|
615
625
|
Err: Error;
|
|
616
|
-
Ok:
|
|
626
|
+
Ok: ResyncReport;
|
|
617
627
|
};
|
|
618
628
|
type Result_13 =
|
|
619
629
|
variant {
|
|
620
630
|
Err: Error;
|
|
621
|
-
Ok:
|
|
631
|
+
Ok: nat;
|
|
622
632
|
};
|
|
623
633
|
type Result_12 =
|
|
624
634
|
variant {
|
|
625
635
|
Err: Error;
|
|
626
|
-
Ok:
|
|
636
|
+
Ok: SessionContext;
|
|
627
637
|
};
|
|
628
638
|
type Result_11 =
|
|
629
639
|
variant {
|
|
630
640
|
Err: Error;
|
|
631
|
-
Ok:
|
|
641
|
+
Ok: MemoryFile;
|
|
632
642
|
};
|
|
633
643
|
type Result_10 =
|
|
634
644
|
variant {
|
|
635
645
|
Err: Error;
|
|
636
|
-
Ok:
|
|
646
|
+
Ok: BackupRetentionReport;
|
|
637
647
|
};
|
|
638
648
|
type Result_1 =
|
|
639
649
|
variant {
|
|
@@ -1298,7 +1308,7 @@ type Engram =
|
|
|
1298
1308
|
/// nomination names. That check compares the caller inside the module, where
|
|
1299
1309
|
/// test/key-replacement.test.mo runs it; this body names no roster gate, because the caller holds
|
|
1300
1310
|
/// no role here until the move.
|
|
1301
|
-
acceptAgentKeyNomination: (agentKey: principal) -> (
|
|
1311
|
+
acceptAgentKeyNomination: (agentKey: principal) -> (Result_82);
|
|
1302
1312
|
/// Consensus transform for the alert webhook outcall: collapse the response to status-only so
|
|
1303
1313
|
/// replicas agree regardless of response headers/body (we only care that the POST landed 2xx).
|
|
1304
1314
|
///
|
|
@@ -1328,7 +1338,7 @@ type Engram =
|
|
|
1328
1338
|
/// and works while frozen; a value is 1–128 characters (an address, or a venue value such as an
|
|
1329
1339
|
/// account name). The action must be registered: a destination list belongs to an action, and a
|
|
1330
1340
|
/// list for no action would be a value nothing checks. The caller is the owner's app.
|
|
1331
|
-
addEip712Destination: (typeId: blob, value: text) -> (
|
|
1341
|
+
addEip712Destination: (typeId: blob, value: text) -> (Result_81);
|
|
1332
1342
|
/// Register a typed-data shape as signable. Owner-only, freeze-gated (a registration is a grant
|
|
1333
1343
|
/// of FUTURE authority — a frozen engram must not be able to widen what it can sign), and the
|
|
1334
1344
|
/// shape is IMMUTABLE: any change mints a new typeId.
|
|
@@ -1368,7 +1378,7 @@ type Engram =
|
|
|
1368
1378
|
};
|
|
1369
1379
|
primaryType: text;
|
|
1370
1380
|
verifyingContract: text;
|
|
1371
|
-
}) -> (
|
|
1381
|
+
}) -> (Result_80);
|
|
1372
1382
|
/// ⟨0.16.0, L1⟩ THE ROLE-CONFLICT ARM, and why three refusals here are not the same refusal.
|
|
1373
1383
|
///
|
|
1374
1384
|
/// This method had five distinct ways to say no through one `text`, and a caller could only tell
|
|
@@ -1387,7 +1397,7 @@ type Engram =
|
|
|
1387
1397
|
/// refused by `requireOwner`'s own words. Empty words, words over `RecordWords.WORDS_MAX` or
|
|
1388
1398
|
/// holding a line break are `#Invalid`; an id past the head is `#NotFound`; nothing is recorded
|
|
1389
1399
|
/// on any refusal.
|
|
1390
|
-
addRecordNote: (about: nat, note: text) -> (
|
|
1400
|
+
addRecordNote: (about: nat, note: text) -> (Result_13);
|
|
1391
1401
|
/// Returns the write RECEIPT, not just the version.
|
|
1392
1402
|
///
|
|
1393
1403
|
/// The receipt was always computed and then thrown away: MemoryRouter hands back
|
|
@@ -1419,7 +1429,7 @@ type Engram =
|
|
|
1419
1429
|
/// Gated on requireWritesNotPaused — unlike the export. This one destroys retained entries, which
|
|
1420
1430
|
/// is exactly what a guardian pause exists to hold. No action alert is raised: the operation is
|
|
1421
1431
|
/// owner-initiated, owner-only, and already chained into the audit log.
|
|
1422
|
-
applyCondense: (toSeq: nat) -> (
|
|
1432
|
+
applyCondense: (toSeq: nat) -> (Result_79);
|
|
1423
1433
|
/// Owner-only: activate a guardian who has registered against an invite.
|
|
1424
1434
|
///
|
|
1425
1435
|
/// Until this call the guardian is `#Pending` and can do NOTHING — registering is a claim, this
|
|
@@ -1490,13 +1500,13 @@ type Engram =
|
|
|
1490
1500
|
///
|
|
1491
1501
|
/// The write half also refuses while writes are PAUSED.
|
|
1492
1502
|
backupInit: (dbType: text, backupType: BackupType, parentBackupId:
|
|
1493
|
-
opt text, sha256: text, backupLabel: opt text) -> (
|
|
1503
|
+
opt text, sha256: text, backupLabel: opt text) -> (Result_52);
|
|
1494
1504
|
/// Read one chunk of a finalized backup, by index.
|
|
1495
1505
|
///
|
|
1496
1506
|
/// ⚠ GATED ON `read_backup`, which is NOT the permission the upload half uses — that one is
|
|
1497
1507
|
/// `canAppendMemory`. Holding one says nothing about the other, deliberately: taking a backup and
|
|
1498
1508
|
/// carrying it away are different authorities.
|
|
1499
|
-
backupPullChunk: (backupId: text, chunkIndex: nat) -> (
|
|
1509
|
+
backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_68) query;
|
|
1500
1510
|
backupPushChunk: (backupId: text, chunkIndex: nat, data: blob) ->
|
|
1501
1511
|
(Result_1);
|
|
1502
1512
|
/// The OWNER cancels an agent's pending key nomination; the agent keeps its current key. Refused
|
|
@@ -1529,7 +1539,7 @@ type Engram =
|
|
|
1529
1539
|
/// ⟨2026-10-02⟩ The second parameter is NAMED `amountE6` now, as the census row above rules the
|
|
1530
1540
|
/// pair — e6 base units of the token named first. A name only: Candid passes arguments by
|
|
1531
1541
|
/// position, so nothing on the wire moved.
|
|
1532
|
-
convertEarningsToCycles: (token: text, amountE6: nat) -> (
|
|
1542
|
+
convertEarningsToCycles: (token: text, amountE6: nat) -> (Result_13);
|
|
1533
1543
|
/// Owner-only: mint a single-use invite code an agent redeems with `pairAgent`.
|
|
1534
1544
|
///
|
|
1535
1545
|
/// ⚠ READ THIS BEFORE INVITING SOMEONE BACK. Pairing is ONE-SHOT PER PRINCIPAL on
|
|
@@ -1548,7 +1558,7 @@ type Engram =
|
|
|
1548
1558
|
/// A principal that is already a GUARDIAN cannot become an agent — a guardian is an
|
|
1549
1559
|
/// independent check on agents, so one wallet must not hold both.
|
|
1550
1560
|
createAgentInvite: (name: text, permissions: AgentPermissions) ->
|
|
1551
|
-
(
|
|
1561
|
+
(Result_52);
|
|
1552
1562
|
/// Owner-only: mint an invite for a GUARDIAN — an independent check on agents, not a
|
|
1553
1563
|
/// co-owner and not a recovery agent.
|
|
1554
1564
|
///
|
|
@@ -1571,7 +1581,7 @@ type Engram =
|
|
|
1571
1581
|
/// So an invite that fails to redeem for that reason is not a bad code. The rule exists because
|
|
1572
1582
|
/// a check must be independent of the thing it checks.
|
|
1573
1583
|
createGuardianInvite: (name: text, permissions: GuardianPermissions) ->
|
|
1574
|
-
(
|
|
1584
|
+
(Result_52);
|
|
1575
1585
|
/// OWNER-ONLY deletion of a stored backup.
|
|
1576
1586
|
///
|
|
1577
1587
|
/// ⚠ NOT THE SAME GATE AS THE REST OF THE FAMILY, and the asymmetry is deliberate: `backupInit`,
|
|
@@ -1614,7 +1624,7 @@ type Engram =
|
|
|
1614
1624
|
/// WHAT: an entry the owner's review would show (`qualifiesForReview` — an agent's append or
|
|
1615
1625
|
/// revision, or a paid session's append) that succeeded, still held in full by the ring.
|
|
1616
1626
|
/// One dispute per guardian per write (`#Conflict`, the first stands).
|
|
1617
|
-
disputeAgentWrite: (about: nat, reason: text) -> (
|
|
1627
|
+
disputeAgentWrite: (about: nat, reason: text) -> (Result_13);
|
|
1618
1628
|
/// Record that log entries [fromSeq, toSeq] were served, and return the root that proves it.
|
|
1619
1629
|
///
|
|
1620
1630
|
/// This is the receipt ledgerfs Q2 requires before any of those entries may be condensed away.
|
|
@@ -1628,7 +1638,7 @@ type Engram =
|
|
|
1628
1638
|
/// situation rather than a safety measure. It IS gated on requireMemoryAttached: a store that
|
|
1629
1639
|
/// failed its integrity check must not attest anything it cannot vouch for.
|
|
1630
1640
|
exportMemoryRange: (fromSeq: nat, toSeq: nat, authorFilter:
|
|
1631
|
-
opt principal) -> (
|
|
1641
|
+
opt principal) -> (Result_78);
|
|
1632
1642
|
/// ⟨0.16.0, L2.2 — renamed from `guardianFreezePayments`⟩ The prefix LIED about who may call it.
|
|
1633
1643
|
/// The gate is `requireOwnerOrGuardian`, and an owner freezing their own payments is the ordinary
|
|
1634
1644
|
/// case — the guardian is the exceptional one. A name that says otherwise sends an owner looking
|
|
@@ -1670,7 +1680,7 @@ type Engram =
|
|
|
1670
1680
|
/// brake is NOT pulled — the caller pulls it with `freezePayments`, or shortens the words.
|
|
1671
1681
|
freezePaymentsWithReason: (reason: text) -> (Result_1);
|
|
1672
1682
|
/// Delivery status + config readback. Owner-only (the URL is a secret).
|
|
1673
|
-
getActionAlertStatus: () -> (
|
|
1683
|
+
getActionAlertStatus: () -> (Result_66) query;
|
|
1674
1684
|
/// Agents need to know what they may revise, so they can read it too. Whole-value config, same
|
|
1675
1685
|
/// carve-out as getProtectedPaths — and kept a SEPARATE method from it deliberately (L2.2): a
|
|
1676
1686
|
/// protected path and a revisable path are opposite grants, and one accessor for both would be a
|
|
@@ -1678,7 +1688,7 @@ type Engram =
|
|
|
1678
1688
|
///
|
|
1679
1689
|
/// Refusal reason preserved from the trap: a grant is a power, and its absence and its
|
|
1680
1690
|
/// concealment are different facts.
|
|
1681
|
-
getAgentRevisablePaths: () -> (
|
|
1691
|
+
getAgentRevisablePaths: () -> (Result_62) query;
|
|
1682
1692
|
/// OWNER-ONLY: every engagement's seat weeks on this engram, with the agent's root — the day it
|
|
1683
1693
|
/// paired, the days of its first and last payment signature, a 64-week map whose bit 0 is the week
|
|
1684
1694
|
/// of the last one, and how many were produced. Never an amount, a recipient or a nonce.
|
|
@@ -1689,7 +1699,7 @@ type Engram =
|
|
|
1689
1699
|
/// order. Anyone else is refused by name (`#Refused getAgentSeatWeeks: …`), never answered with an
|
|
1690
1700
|
/// empty page. Paged; `total` is every engagement ever paired here (a reset keeps the rows).
|
|
1691
1701
|
/// Two rows can name one root: an agent paired again after it left is a second engagement.
|
|
1692
|
-
getAgentSeatWeeks: (start: nat, limit: nat) -> (
|
|
1702
|
+
getAgentSeatWeeks: (start: nat, limit: nat) -> (Result_76) query;
|
|
1693
1703
|
/// Owner: everything written into this engram by someone other than the owner since the last
|
|
1694
1704
|
/// markAgentWritesReviewed() — agent appends/revisions AND paid-session appends (see
|
|
1695
1705
|
/// qualifiesForReview for why those two families are recognised differently).
|
|
@@ -1697,7 +1707,7 @@ type Engram =
|
|
|
1697
1707
|
/// them — the UI must page (markAgentWritesReviewed(?lastShownId)) and must NOT present 200
|
|
1698
1708
|
/// as a total. `earliest` discloses ring eviction — if cursor < earliest, entries between them
|
|
1699
1709
|
/// aged out of the ring (the CHAIN still proves total count; this view can't show their bodies).
|
|
1700
|
-
getAgentWriteReview: () -> (
|
|
1710
|
+
getAgentWriteReview: () -> (Result_75) query;
|
|
1701
1711
|
/// Why anchoring is or is not advancing. PUBLIC: ungated on purpose — detecting a stalled
|
|
1702
1712
|
/// engram is the point, a gated read would fail-to-empty and hand a third party fabricated zeros,
|
|
1703
1713
|
/// and none of these fields is a secret — `total` is already public via getCertifiedAuditHead.
|
|
@@ -1716,7 +1726,7 @@ type Engram =
|
|
|
1716
1726
|
/// below serves the same head WITH the subnet certificate for a caller that needs to verify it
|
|
1717
1727
|
/// was signed rather than asserted.
|
|
1718
1728
|
getAuditHead: () -> (AuditHead) query;
|
|
1719
|
-
getBackupMetadata: (backupId: text) -> (
|
|
1729
|
+
getBackupMetadata: (backupId: text) -> (Result_74) query;
|
|
1720
1730
|
/// ⟨2026-10-21, the owner's round-11 answer m: a backup-retention getter⟩ How many backups of
|
|
1721
1731
|
/// `dbType` each creator keeps, and whether that is the default — the read `setBackupRetention`
|
|
1722
1732
|
/// lacked, so "Keeps your newest 3" showed only on the phone that last set it.
|
|
@@ -1727,7 +1737,7 @@ type Engram =
|
|
|
1727
1737
|
/// denied"), a revoked or resigned agent, a guardian (guardians take no backups), a stranger and
|
|
1728
1738
|
/// the anonymous caller. A kind the setter would refuse is `#Invalid` here too
|
|
1729
1739
|
/// (`Backup.getRetention`). Records nothing (a query).
|
|
1730
|
-
getBackupRetention: (dbType: text) -> (
|
|
1740
|
+
getBackupRetention: (dbType: text) -> (Result_73) query;
|
|
1731
1741
|
/// The cashier this engram recognises as its rent biller — `null` until the registry pushes one.
|
|
1732
1742
|
///
|
|
1733
1743
|
/// PUBLIC: a payer about to send money needs to know which cashier this engram will accept credit
|
|
@@ -1735,6 +1745,14 @@ type Engram =
|
|
|
1735
1745
|
/// never become rent. The registry publishes the same fact as `getRentBiller`; publishing it here
|
|
1736
1746
|
/// too is what lets the two be COMPARED, which is the only way to catch a mismatch.
|
|
1737
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;
|
|
1738
1756
|
/// ⟨2026-10-21, the owner's round-11 answer d⟩ Each brake: on or off, and while on, who pulled it
|
|
1739
1757
|
/// LAST (their key and whether as owner or guardian), since when, and the reason they gave — the
|
|
1740
1758
|
/// same person and time as the newest brake entry on the record (`RecordWords.BrakePull`). For the
|
|
@@ -1743,7 +1761,7 @@ type Engram =
|
|
|
1743
1761
|
/// — an agent learns a brake is on from the refusal of what it tried, and needs no more). `pull`
|
|
1744
1762
|
/// is null for a brake that is off, and for one carried on across the upgrade that added this
|
|
1745
1763
|
/// read (who pulled it was not recorded then) — never a guessed pull.
|
|
1746
|
-
getBrakes: () -> (
|
|
1764
|
+
getBrakes: () -> (Result_71) query;
|
|
1747
1765
|
/// ⟨0.16.0, L9/L10 — census row⟩ `Wire.CertifiedAuditHead`, not an anonymous record. The
|
|
1748
1766
|
/// registry, market and cashier already served the shared type; the engram — the canister that
|
|
1749
1767
|
/// IS the evidence product — was the one chain still answering in a shape of its own, missing
|
|
@@ -1766,11 +1784,11 @@ type Engram =
|
|
|
1766
1784
|
/// query's state writes are discarded when it returns, and the `denied` call first written here
|
|
1767
1785
|
/// recorded nothing while reading as if it did. The refusal is loud in the reply instead. WHAT
|
|
1768
1786
|
/// WOULD MAKE THIS WRONG: a reason to record who asked — then this becomes an update that says so.
|
|
1769
|
-
getChildAllowance: (agentPrincipal: principal) -> (
|
|
1787
|
+
getChildAllowance: (agentPrincipal: principal) -> (Result_70) query;
|
|
1770
1788
|
/// Owner-only, Billing-class: what opening an engram costs this engram, the balance below which an
|
|
1771
1789
|
/// agent's request is refused, the balance now, and every agent's allowance. The console's cost
|
|
1772
1790
|
/// sentence reads it. Cycles are owner-class information, as on the owner's console read.
|
|
1773
|
-
getChildOpening: () -> (
|
|
1791
|
+
getChildOpening: () -> (Result_69) query;
|
|
1774
1792
|
/// Derive the shared memory-encryption key, encrypted under the caller's transport
|
|
1775
1793
|
/// public key. Gated to owner + read-agents (the same principals allowed to read
|
|
1776
1794
|
/// memory). The client decrypts it locally with its transport secret key.
|
|
@@ -1795,7 +1813,7 @@ type Engram =
|
|
|
1795
1813
|
/// cost. Stated here because L7 requires the reason be readable from the interface rather than
|
|
1796
1814
|
/// inferred by opening the body — which is exactly what had to happen to write this line.
|
|
1797
1815
|
getEncryptedMemoryKey: (epoch: opt nat, transportPublicKey: blob) ->
|
|
1798
|
-
(
|
|
1816
|
+
(Result_68);
|
|
1799
1817
|
/// ⟨0.16.0, owner ruling 2026-08-20 — option (a)⟩ `x402Support` REPORTS THE RAIL, not a constant.
|
|
1800
1818
|
///
|
|
1801
1819
|
/// The card's config hardcodes `x402Support = true`, answering a buyer's question with a fact
|
|
@@ -1890,7 +1908,7 @@ type Engram =
|
|
|
1890
1908
|
/// It refuses rather than half-answers: if either address cannot be derived the reply is
|
|
1891
1909
|
/// `#Err`, never a record carrying an empty string (ic402's `getEvmAddress` answers `""` on a
|
|
1892
1910
|
/// failed derivation — that is fail-to-empty on a money surface, and it stops here).
|
|
1893
|
-
getEvmAddress: () -> (
|
|
1911
|
+
getEvmAddress: () -> (Result_67);
|
|
1894
1912
|
/// The owner's OWN EVM address, if they registered one — distinct from `getEvmAddress`, which is
|
|
1895
1913
|
/// the address this canister derives for itself.
|
|
1896
1914
|
///
|
|
@@ -1905,7 +1923,7 @@ type Engram =
|
|
|
1905
1923
|
/// the management canister's `ecdsa_public_key`. A query cannot await, so the round-trip is the
|
|
1906
1924
|
/// cost — stated here because L7 requires the reason be readable from the interface rather than
|
|
1907
1925
|
/// inferred by opening the body.
|
|
1908
|
-
getEvmSignerAddress: () -> (
|
|
1926
|
+
getEvmSignerAddress: () -> (Result_52);
|
|
1909
1927
|
/// PUBLIC: where this chain begins, for the stranger deciding whether to trust it.
|
|
1910
1928
|
///
|
|
1911
1929
|
/// The fourth of the four evidence methods (`getAuditHead`, `getCertifiedAuditHead`,
|
|
@@ -1914,7 +1932,7 @@ type Engram =
|
|
|
1914
1932
|
/// cannot verify it, and nothing here identifies anybody.
|
|
1915
1933
|
getGenesisNote: () -> (GenesisNote) query;
|
|
1916
1934
|
/// A guardian's own channel status (their URL is their secret — each guardian sees only theirs).
|
|
1917
|
-
getGuardianAlertStatus: () -> (
|
|
1935
|
+
getGuardianAlertStatus: () -> (Result_66) query;
|
|
1918
1936
|
/// The market this engram will accept signing requests from — `null` until the registry pushes
|
|
1919
1937
|
/// one at spawn, which is why `requireMarket` refuses fleet-wide today.
|
|
1920
1938
|
///
|
|
@@ -1944,7 +1962,7 @@ type Engram =
|
|
|
1944
1962
|
/// never renumbered: the next page starts at the last version returned plus one. Defaults
|
|
1945
1963
|
/// return the whole history of any file a pre-FD engram could have held.
|
|
1946
1964
|
getMemoryHistory: (path: text, start: opt nat, max: opt nat) ->
|
|
1947
|
-
(
|
|
1965
|
+
(Result_65) query;
|
|
1948
1966
|
/// PUBLIC: the epoch alone, and deliberately nothing else (rotation study D4). A `rotatedAt[]`
|
|
1949
1967
|
/// history would be a public, fleet-enumerable feed of when each owner terminated a trust
|
|
1950
1968
|
/// relationship — readable by, among others, the party just terminated.
|
|
@@ -1985,7 +2003,7 @@ type Engram =
|
|
|
1985
2003
|
/// Refusal reasons of both merge: an empty policy reads as "nothing is capped, every version kept
|
|
1986
2004
|
/// forever" — a claim about what this engram will DESTROY — and an empty guard list reads as
|
|
1987
2005
|
/// "nothing is held back".
|
|
1988
|
-
getMemoryRetentionPolicy: () -> (
|
|
2006
|
+
getMemoryRetentionPolicy: () -> (Result_64) query;
|
|
1989
2007
|
/// The metrics reader this engram answers — `null` until the spawning registry names one.
|
|
1990
2008
|
///
|
|
1991
2009
|
/// PUBLIC: an owner deciding whether to switch the read off needs to know who it is, and anyone
|
|
@@ -1998,7 +2016,7 @@ type Engram =
|
|
|
1998
2016
|
/// see: the only row it can ever return is the caller's own, so "you are not a guardian here" is
|
|
1999
2017
|
/// a fact about the caller, told to the caller. There is nothing to leak by omission — which is
|
|
2000
2018
|
/// the test the #NotFound arm sets.
|
|
2001
|
-
getMyGuardianStatus: () -> (
|
|
2019
|
+
getMyGuardianStatus: () -> (Result_16) query;
|
|
2002
2020
|
/// ⟨0.16.0, NEW⟩ The gated half of the status() split.
|
|
2003
2021
|
///
|
|
2004
2022
|
/// Every field is bare — no masking, no `authorized` discriminator — because reaching this record
|
|
@@ -2008,7 +2026,7 @@ type Engram =
|
|
|
2008
2026
|
/// was `nat`, then widened to `opt nat` so a refusal could be `null`, which broke every published
|
|
2009
2027
|
/// client (rule 4) and bought a masked answer nobody had asked for — the census could not even
|
|
2010
2028
|
/// find a consumer that read the masked `0`. Behind a gate there is nobody to mask it from.
|
|
2011
|
-
getOwnerConsole: () -> (
|
|
2029
|
+
getOwnerConsole: () -> (Result_63) query;
|
|
2012
2030
|
/// Owner + agents only (agents need it to avoid writing protected paths).
|
|
2013
2031
|
///
|
|
2014
2032
|
/// A NAMED RECORD, not a Page: the setter replaces this list wholesale, so there is no window to
|
|
@@ -2020,7 +2038,7 @@ type Engram =
|
|
|
2020
2038
|
/// path on this engram is protected", and an agent consults this list precisely to avoid
|
|
2021
2039
|
/// writing one — so a fabricated empty here does not merely misinform, it invites the write the
|
|
2022
2040
|
/// list exists to prevent.
|
|
2023
|
-
getProtectedPaths: () -> (
|
|
2041
|
+
getProtectedPaths: () -> (Result_62) query;
|
|
2024
2042
|
/// Whether the metrics reader's read is answered — `true` from birth.
|
|
2025
2043
|
///
|
|
2026
2044
|
/// PUBLIC: the promise that an owner can switch this read off can be checked only if the switch
|
|
@@ -2029,7 +2047,7 @@ type Engram =
|
|
|
2029
2047
|
/// Owner-only, Billing-class: the signing floor, the balance, one signature's price, and how many
|
|
2030
2048
|
/// payment signatures the balance carries above the floor before `signX402Payment` is refused by
|
|
2031
2049
|
/// name. The same numbers the check uses, so Billing can say only what the engram enforces.
|
|
2032
|
-
getSigningFloor: () -> (
|
|
2050
|
+
getSigningFloor: () -> (Result_61) query;
|
|
2033
2051
|
/// The registry that spawned this engram, if it recorded one.
|
|
2034
2052
|
///
|
|
2035
2053
|
/// PUBLIC: it is the provenance claim. An engram asserting it is part of a fleet, under that
|
|
@@ -2046,7 +2064,7 @@ type Engram =
|
|
|
2046
2064
|
/// configuration, and the engram-wide total would also tell one agent how much the others spent.
|
|
2047
2065
|
/// A refusal names this method (`Gated.gatedResult`) rather than answering null/0 — a ceiling of
|
|
2048
2066
|
/// "none" and a spend of 0 are both real answers, so a fabricated one would be read as fact.
|
|
2049
|
-
getSpendCeiling: () -> (
|
|
2067
|
+
getSpendCeiling: () -> (Result_60) query;
|
|
2050
2068
|
/// Read the caps in force for a caller.
|
|
2051
2069
|
///
|
|
2052
2070
|
/// OWNER-ONLY, and this is where it diverges from the market's inbound twin, which is public.
|
|
@@ -2054,8 +2072,8 @@ type Engram =
|
|
|
2054
2072
|
/// Here the engram serves no 402s at all: these caps are the owner's private custody
|
|
2055
2073
|
/// configuration, and publishing them would tell any caller exactly how large a signing request
|
|
2056
2074
|
/// can be before it needs an approval nobody is watching for.
|
|
2057
|
-
getSpendPolicy: (caller: opt principal) -> (
|
|
2058
|
-
getStorageStats: () -> (
|
|
2075
|
+
getSpendPolicy: (caller: opt principal) -> (Result_59) query;
|
|
2076
|
+
getStorageStats: () -> (Result_58) query;
|
|
2059
2077
|
/// Timer arm-state. PUBLIC and deliberately so: these timers are self-arming to save cycles,
|
|
2060
2078
|
/// and an optimisation nobody can verify is an optimisation nobody should trust. Cheap to read,
|
|
2061
2079
|
/// leaks nothing (booleans about our own scheduling).
|
|
@@ -2126,12 +2144,12 @@ type Engram =
|
|
|
2126
2144
|
/// ⟨L7⟩ MARKER ADDED 2026-08-23, reasoning above UNCHANGED — this block already said "Stays an
|
|
2127
2145
|
/// UPDATE, marked per L7: it awaits three ICRC-1 ledgers". It was marked in prose and invisible
|
|
2128
2146
|
/// to any gate; the glyph is what `scripts/check-update-for-read.mjs` matches.
|
|
2129
|
-
getWalletBalances: () -> (
|
|
2147
|
+
getWalletBalances: () -> (Result_57);
|
|
2130
2148
|
/// Refusal reason preserved, and it is the clearest case of why a masked read is worse than no
|
|
2131
2149
|
/// read: three empty strings with `configured = false` is a VALID-LOOKING answer meaning "this
|
|
2132
2150
|
/// engram has no World ID configuration" — handed to a caller who merely lacks a grant. The
|
|
2133
2151
|
/// fabrication is indistinguishable from the truth by construction.
|
|
2134
|
-
getWorldIdConfig: () -> (
|
|
2152
|
+
getWorldIdConfig: () -> (Result_56) query;
|
|
2135
2153
|
/// ⟨L7⟩ UPDATE, NOT QUERY: this awaits THREE system calls — `raw_rand()` for the nonce,
|
|
2136
2154
|
/// `Call.signWithEcdsa` for the signature, and `worldIdRpPublicKey()` for the derived key. A
|
|
2137
2155
|
/// query can do none of them.
|
|
@@ -2140,7 +2158,7 @@ type Engram =
|
|
|
2140
2158
|
/// Valid iff the derived signer address (getWorldIdRpSignerAddress) is registered for this rp_id in
|
|
2141
2159
|
/// the World Developer Portal. Short-lived (300s TTL, idkit-server's default) and single-purpose —
|
|
2142
2160
|
/// it authorizes opening one verification request, nothing else.
|
|
2143
|
-
getWorldIdRpContext: () -> (
|
|
2161
|
+
getWorldIdRpContext: () -> (Result_55);
|
|
2144
2162
|
/// Owner-only: the EVM address derived from the engram's dedicated World ID RP signing key (the
|
|
2145
2163
|
/// "worldid-rp" tECDSA path). Register THIS address as the rp_id's signer in the World Developer
|
|
2146
2164
|
/// Portal — the engram never holds or exports a private key (only threshold shares exist, on the
|
|
@@ -2150,7 +2168,7 @@ type Engram =
|
|
|
2150
2168
|
/// awaits `worldIdRpPublicKey()` (management `ecdsa_public_key`), and it calls `denied()` on
|
|
2151
2169
|
/// refusal — a state write, which a query cannot perform. So even if the key were cached this
|
|
2152
2170
|
/// could not become a query without silently retiring its denial record (ADR-0002's class).
|
|
2153
|
-
getWorldIdRpSignerAddress: () -> (
|
|
2171
|
+
getWorldIdRpSignerAddress: () -> (Result_52);
|
|
2154
2172
|
/// The verified IDKitResult, verbatim, as World's /api/v4/verify accepted it — the re-checkable
|
|
2155
2173
|
/// artifact behind verifiedHuman. Role-gated because it carries the NULLIFIER.
|
|
2156
2174
|
/// `Result<opt Text>` — and the double wrapper is the entire point, not redundancy.
|
|
@@ -2169,7 +2187,7 @@ type Engram =
|
|
|
2169
2187
|
/// `///`, so the dead name was PUBLISHED in engram.did and pointed every client at a method the
|
|
2170
2188
|
/// canister does not serve. The tombstones below and at `about()` are historical and correct as
|
|
2171
2189
|
/// written; this one was present tense, which is the difference that matters.⟩
|
|
2172
|
-
getWorldIdVerification: () -> (
|
|
2190
|
+
getWorldIdVerification: () -> (Result_54) query;
|
|
2173
2191
|
/// ⟨0.16.0, L1⟩ THE EMERGENCY FAMILY. Every refusal below is `#Refused` or `#NotFound`, and the
|
|
2174
2192
|
/// absence of a `#Conflict` here is the point: these are the calls someone makes while something
|
|
2175
2193
|
/// is going wrong, and the only two answers that help are "you may not do this" and "there is
|
|
@@ -2244,7 +2262,7 @@ type Engram =
|
|
|
2244
2262
|
///
|
|
2245
2263
|
/// Owner-gated because it reports on custody posture, and answered as a Result so that a
|
|
2246
2264
|
/// wrong-identity caller gets a refusal rather than a bare `false` that reads as "no address yet".
|
|
2247
|
-
isEvmAddressCached: () -> (
|
|
2265
|
+
isEvmAddressCached: () -> (Result_53) query;
|
|
2248
2266
|
/// Issue an OAuth authorization code. Called by an OAuth client's sign-in bridge
|
|
2249
2267
|
/// (an `/auth/connector`-style route) after II authentication. The client then
|
|
2250
2268
|
/// redirects the user's browser to `redirectUri` with `?code=<this>` so the
|
|
@@ -2252,7 +2270,7 @@ type Engram =
|
|
|
2252
2270
|
///
|
|
2253
2271
|
/// Owner-only: only the engram owner can authorize a Connector install.
|
|
2254
2272
|
issueAuthCode: (redirectUri: text, scope: text, codeChallenge: text,
|
|
2255
|
-
clientId: opt text) -> (
|
|
2273
|
+
clientId: opt text) -> (Result_52);
|
|
2256
2274
|
/// ⟨0.16.0⟩ `getCycleSnapshotSource` DELETED — folded into `CycleSnapshot.source`, one label per
|
|
2257
2275
|
/// ROW. A single label for a whole ring misattributes every row recorded under the other source,
|
|
2258
2276
|
/// and the source flips by design (self-call first, balance on fallback). Its documentation of
|
|
@@ -2266,7 +2284,7 @@ type Engram =
|
|
|
2266
2284
|
/// Refusal reason preserved, and it is the sharpest of this family: a masked `[]` reads as a
|
|
2267
2285
|
/// DORMANT engram and corrupts retention math — a fabricated empty here does not just misinform a
|
|
2268
2286
|
/// reader, it feeds a wrong number into a decision about destroying data.
|
|
2269
|
-
listActivitySnapshots: (start: nat, limit: nat) -> (
|
|
2287
|
+
listActivitySnapshots: (start: nat, limit: nat) -> (Result_51) query;
|
|
2270
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,
|
|
2271
2289
|
/// m."⟩ OWNER-ONLY: what each agent has spent today, beside the daily limit in force for it, so the
|
|
2272
2290
|
/// agent rows can say "$0.50 of $5.00 today" where they said a count of payments. Read from the
|
|
@@ -2283,7 +2301,7 @@ type Engram =
|
|
|
2283
2301
|
/// because the payment path keeps no figure then (`SpendCeiling.AgentSpendRow` says why).
|
|
2284
2302
|
/// WHAT WOULD MAKE THIS WRONG: `x402SignFor` keeping the per-caller total by something other than
|
|
2285
2303
|
/// the calling key, or under another day boundary.
|
|
2286
|
-
listAgentSpendToday: (start: nat, limit: nat) -> (
|
|
2304
|
+
listAgentSpendToday: (start: nat, limit: nat) -> (Result_50) query;
|
|
2287
2305
|
/// ⟨0.16.0⟩ THE PAGE EXEMPLAR. Trap → `#Refused`, bare array → `Result<Page<T>>` (L1 + L3).
|
|
2288
2306
|
///
|
|
2289
2307
|
/// The refusal prose that used to be `gatedTrap`'s `whyNotEmpty` argument is not lost — it is why
|
|
@@ -2298,7 +2316,7 @@ type Engram =
|
|
|
2298
2316
|
///
|
|
2299
2317
|
/// `withheld` is 0: this roster is owner-only in whole, so there is no partial-visibility case.
|
|
2300
2318
|
/// A method that filters rows by caller sets it — see L1's row-level honesty rule.
|
|
2301
|
-
listAgents: (start: nat, limit: nat) -> (
|
|
2319
|
+
listAgents: (start: nat, limit: nat) -> (Result_49) query;
|
|
2302
2320
|
/// The GUARDIAN-audience projection of the agent roster — three fields, not the full record.
|
|
2303
2321
|
///
|
|
2304
2322
|
/// Two audiences, two methods (L1/L8), rather than one method masking fields by caller: a
|
|
@@ -2310,7 +2328,7 @@ type Engram =
|
|
|
2310
2328
|
/// Refusal reason preserved: `[]` reads as "this engram has no agents", and this is the list a
|
|
2311
2329
|
/// guardian consults BEFORE REVOKING ONE. A fabricated empty here does not merely misinform —
|
|
2312
2330
|
/// it tells someone acting under emergency powers that there is nothing to act on.
|
|
2313
|
-
listAgentsForGuardian: (start: nat, limit: nat) -> (
|
|
2331
|
+
listAgentsForGuardian: (start: nat, limit: nat) -> (Result_48) query;
|
|
2314
2332
|
/// Owner-only: rows carry caller, amount, operation and free-text rationale. The SDK omits it.
|
|
2315
2333
|
///
|
|
2316
2334
|
/// The optional leading filter SURVIVES the L3 reshape — ratified (census tier-2 #8) rather than
|
|
@@ -2323,7 +2341,7 @@ type Engram =
|
|
|
2323
2341
|
///
|
|
2324
2342
|
/// Refusal reason preserved: `[]` reads as "nothing is awaiting the owner's decision".
|
|
2325
2343
|
listApprovalRequests: (statusFilter: opt ApprovalStatus, start: nat,
|
|
2326
|
-
limit: nat) -> (
|
|
2344
|
+
limit: nat) -> (Result_34) query;
|
|
2327
2345
|
/// ⟨0.16.0⟩ `total` IS THE HEAD COUNTER, and on this method that is the entire point.
|
|
2328
2346
|
///
|
|
2329
2347
|
/// The audit log is a bounded RING: it trims its tail, so "rows you can read" and "entries that
|
|
@@ -2357,7 +2375,7 @@ type Engram =
|
|
|
2357
2375
|
/// where this record switched to the hash-first rule. A sealed row costs one SHA-256 of its body
|
|
2358
2376
|
/// at read time; nothing new is stored. WHAT WOULD MAKE THIS WRONG: a sealed row carrying any part
|
|
2359
2377
|
/// of a body, or a stranger reaching `items` (test/record-view.test.mo pins both).
|
|
2360
|
-
listAuditEntries: (start: nat, limit: nat) -> (
|
|
2378
|
+
listAuditEntries: (start: nat, limit: nat) -> (Result_47) query;
|
|
2361
2379
|
/// ⟨0.16.0, L1 + L3 — census-ruled⟩ THE TWO-MECHANISM EXCEPTION DISSOLVES.
|
|
2362
2380
|
///
|
|
2363
2381
|
/// This method used to answer THREE ways to one question: a list, an `#Err` text, and a trap,
|
|
@@ -2381,7 +2399,7 @@ type Engram =
|
|
|
2381
2399
|
/// `dbTypeFilter` DIES on the wire (census). The capability does not: `EngramClient.listBackups`
|
|
2382
2400
|
/// keeps its optional filter and applies it to the page, so no caller loses the ability to ask
|
|
2383
2401
|
/// "backups of this database" — it stops being a thing the canister has to page around.
|
|
2384
|
-
listBackups: (start: nat, limit: nat) -> (
|
|
2402
|
+
listBackups: (start: nat, limit: nat) -> (Result_46) query;
|
|
2385
2403
|
/// List all bearer tokens — Active, Revoked, and Expired. Owner uses this in
|
|
2386
2404
|
/// the dashboard to show installed Connectors (claude.ai, Claude Desktop, etc.).
|
|
2387
2405
|
/// Refusal reason preserved from the trap: `[]` reads as "no connector is installed on this
|
|
@@ -2391,7 +2409,7 @@ type Engram =
|
|
|
2391
2409
|
/// `bearerTokenStore.list()` already resolves each token's status at read time (a token that
|
|
2392
2410
|
/// merely stopped being used is reported `#Expired`, not a stale `#Active`), so the page carries
|
|
2393
2411
|
/// the same honesty the store gained on 2026-08-17.
|
|
2394
|
-
listBearerTokens: (start: nat, limit: nat) -> (
|
|
2412
|
+
listBearerTokens: (start: nat, limit: nat) -> (Result_45) query;
|
|
2395
2413
|
/// The condense checkpoints in the retained log at or above `startSeq`, oldest first.
|
|
2396
2414
|
///
|
|
2397
2415
|
/// ⟨0.16.0, NEW⟩ The other half of the split above. A checkpoint is the only surviving record of a
|
|
@@ -2401,18 +2419,18 @@ type Engram =
|
|
|
2401
2419
|
///
|
|
2402
2420
|
/// Owner-only like every other archive surface, and for the same structural reason: these rows
|
|
2403
2421
|
/// carry the chain positions and roots of entries whose paths were inside the hash preimage.
|
|
2404
|
-
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (
|
|
2422
|
+
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (Result_44) query;
|
|
2405
2423
|
/// ⟨0.16.0⟩ `metrics()` DELETED — absorbed by `about()`.
|
|
2406
2424
|
///
|
|
2407
2425
|
/// Two public projections of one canister (L2.2): `metrics()` and `status()` both answered "what
|
|
2408
2426
|
/// is this engram like" and disagreed on which counters they carried, so a consumer had to fetch
|
|
2409
2427
|
/// both and know which one owned each field. Every field here survives on `about()`, day-flooring
|
|
2410
2428
|
/// included.
|
|
2411
|
-
listCycleSnapshots: (start: nat, limit: nat) -> (
|
|
2429
|
+
listCycleSnapshots: (start: nat, limit: nat) -> (Result_43) query;
|
|
2412
2430
|
/// Same `withheld` treatment as listMemoryFiles — the tombstone listing filtered reserved paths
|
|
2413
2431
|
/// for non-owners just as silently, and a caller could not tell a filtered tombstone list from a
|
|
2414
2432
|
/// complete one. Counted before slicing, so policy-hidden rows never blur into paging.
|
|
2415
|
-
listDeletedMemoryFiles: (start: nat, limit: nat) -> (
|
|
2433
|
+
listDeletedMemoryFiles: (start: nat, limit: nat) -> (Result_42) query;
|
|
2416
2434
|
/// Stays on the engram under B1 (hybrid): withdrawal custody does not leave.
|
|
2417
2435
|
///
|
|
2418
2436
|
/// NAMED item, not a `(Text, Int)` tuple. The Int is an activation time, and a bare Int beside a
|
|
@@ -2427,7 +2445,7 @@ type Engram =
|
|
|
2427
2445
|
/// The item's field is `value`, not `address`: a list may hold a venue value that is no address.
|
|
2428
2446
|
/// Readable by the owner, an active agent or an active guardian, as the old list was.
|
|
2429
2447
|
listEip712Destinations: (typeId: blob, start: nat, limit: nat) ->
|
|
2430
|
-
(
|
|
2448
|
+
(Result_41) query;
|
|
2431
2449
|
/// The registered shapes — E3: encodeTypeString is the display artifact, verbatim.
|
|
2432
2450
|
/// Stays on the engram under B1 (hybrid): EIP-712 signing is custody, and custody does not leave.
|
|
2433
2451
|
///
|
|
@@ -2438,20 +2456,20 @@ type Engram =
|
|
|
2438
2456
|
/// ⟨2026-10-14, the owner's ruling 3A⟩ Each row carries its per-field rules (`fieldRules`), joined in
|
|
2439
2457
|
/// from `eip712FieldRules` — they are part of what the type authorises, so a reader of the list must
|
|
2440
2458
|
/// not have to make a second call to learn them. The row type is `Eip712TypeView`.
|
|
2441
|
-
listEip712Types: (start: nat, limit: nat) -> (
|
|
2459
|
+
listEip712Types: (start: nat, limit: nat) -> (Result_40) query;
|
|
2442
2460
|
/// ⟨2026-10-21, round 11 c⟩ Guardians' disputes, oldest first. Same visibility as
|
|
2443
2461
|
/// `listRepudiations` and `listRecordNotes`: the owner and ACTIVE guardians read the rows; an
|
|
2444
2462
|
/// agent gets an empty page whose `withheld` counts them (ruling 16 B holds — a dispute is the
|
|
2445
2463
|
/// guardian's entry, not the agent's); a stranger, a pending guardian and the anonymous caller are
|
|
2446
2464
|
/// refused.
|
|
2447
|
-
listGuardianDisputes: (start: nat, limit: nat) -> (
|
|
2465
|
+
listGuardianDisputes: (start: nat, limit: nat) -> (Result_39) query;
|
|
2448
2466
|
/// Accessible by owner and guardians.
|
|
2449
2467
|
///
|
|
2450
2468
|
/// Refusal reason carried over from the trap, because it is the sharpest example of why this
|
|
2451
2469
|
/// surface may not fail soft: `[]` reads as "this engram has nobody who can freeze payments or
|
|
2452
2470
|
/// pause writes" — a claim about who can STOP it. A caller who cannot tell that from "you may not
|
|
2453
2471
|
/// see the roster" has been told the engram is unguarded when it may be fully guarded.
|
|
2454
|
-
listGuardians: (start: nat, limit: nat) -> (
|
|
2472
|
+
listGuardians: (start: nat, limit: nat) -> (Result_38) query;
|
|
2455
2473
|
/// The export receipts in the retained log at or above `startSeq`, oldest first.
|
|
2456
2474
|
///
|
|
2457
2475
|
/// ⟨0.16.0, L3⟩ ONE LIST, ONE QUESTION. This method used to return receipts AND checkpoints
|
|
@@ -2467,7 +2485,7 @@ type Engram =
|
|
|
2467
2485
|
///
|
|
2468
2486
|
/// Read `MemoryRouter.ReceiptPage` before reading `page.total` as a receipt count. It is not one;
|
|
2469
2487
|
/// it is the chain's length, and the declaration says why.
|
|
2470
|
-
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (
|
|
2488
|
+
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (Result_37) query;
|
|
2471
2489
|
/// ⟨0.16.0⟩ THE `withheld` EXEMPLAR — L1 names this exact method as the defect it fixes.
|
|
2472
2490
|
///
|
|
2473
2491
|
/// A non-owner's answer silently dropped every `config/` and `secrets/` row. Not "refused the
|
|
@@ -2492,7 +2510,7 @@ type Engram =
|
|
|
2492
2510
|
/// the rows of THIS page (`MemoryRouter.info`), after the slice, so the cost is one lookup per
|
|
2493
2511
|
/// row served, never one per file stored. A WIDENED REPLY: a reader that decodes the row by
|
|
2494
2512
|
/// position rather than by field name breaks — none in this repository does.
|
|
2495
|
-
listMemoryFiles: (start: nat, limit: nat) -> (
|
|
2513
|
+
listMemoryFiles: (start: nat, limit: nat) -> (Result_36) query;
|
|
2496
2514
|
/// One page of the memory log, seq-ordered, optionally narrowed to one author.
|
|
2497
2515
|
///
|
|
2498
2516
|
/// THE WINDOW IS THE CURSOR, and the page now states it. The window is
|
|
@@ -2518,7 +2536,7 @@ type Engram =
|
|
|
2518
2536
|
/// with the disclosures that make the page verifiable — the hidden-bound defect the census itself
|
|
2519
2537
|
/// names on previewCondense's row.
|
|
2520
2538
|
listMemoryLog: (startSeq: nat, max: nat, authorFilter: opt principal) ->
|
|
2521
|
-
(
|
|
2539
|
+
(Result_35) query;
|
|
2522
2540
|
/// The caller's OWN spend-approval requests. ⟨0.16.0, L1 + L3 — fixed 2026-08-18⟩
|
|
2523
2541
|
///
|
|
2524
2542
|
/// Two defects in seven lines, and the first is the one this release exists to remove:
|
|
@@ -2535,7 +2553,7 @@ type Engram =
|
|
|
2535
2553
|
/// to see, so `total` over their own rows is the honest count and nothing is hidden FROM them.
|
|
2536
2554
|
/// (The unbounded MAP is filed separately — pruning an approval record destroys evidence of what
|
|
2537
2555
|
/// was asked, which is a retention ruling rather than a shape fix.)
|
|
2538
|
-
listMyApprovalRequests: (start: nat, limit: nat) -> (
|
|
2556
|
+
listMyApprovalRequests: (start: nat, limit: nat) -> (Result_34) query;
|
|
2539
2557
|
/// The payer's own sessions, live ones first. PAYER-SCOPED: a caller sees only their own, which
|
|
2540
2558
|
/// is why this needs no role — a session id is not a secret from the person who paid for it.
|
|
2541
2559
|
///
|
|
@@ -2544,7 +2562,7 @@ type Engram =
|
|
|
2544
2562
|
/// It took no arguments, and a cursor added after the freeze is an argument-list change every
|
|
2545
2563
|
/// client would break on — the market paged its own pending withdrawals before its cut for the
|
|
2546
2564
|
/// same reason. The order is the order sessions were opened.
|
|
2547
|
-
listMySessions: (start: nat, limit: nat) -> (
|
|
2565
|
+
listMySessions: (start: nat, limit: nat) -> (Result_33) query;
|
|
2548
2566
|
///
|
|
2549
2567
|
/// ⟨0.16.0, L3⟩ Paged and enveloped like every other `list*`, and the envelope here is uniformity
|
|
2550
2568
|
/// rather than gating: this method cannot refuse anybody, so `#Err` is unreachable on it. That is
|
|
@@ -2557,7 +2575,7 @@ type Engram =
|
|
|
2557
2575
|
/// asked by strangers. `verifyEngramActiveOwner` on the registry answers only about the owner
|
|
2558
2576
|
/// IT recorded, so this chain is what a caller composes with when currency matters — which it
|
|
2559
2577
|
/// cannot do if it needs a role here.
|
|
2560
|
-
listOwnershipTransfers: (start: nat, limit: nat) -> (
|
|
2578
|
+
listOwnershipTransfers: (start: nat, limit: nat) -> (Result_32) query;
|
|
2561
2579
|
/// ⟨2026-09-29, the platform's question from the build review⟩ OWNER-ONLY: how many payment
|
|
2562
2580
|
/// signatures each agent has obtained today, and the daily limit (200, `PaymentSignCap`). The
|
|
2563
2581
|
/// owner's console stated the rule and showed no number, because nothing served one; a number it
|
|
@@ -2573,7 +2591,7 @@ type Engram =
|
|
|
2573
2591
|
/// marketplace's one shared count today is in the reply's `marketplace` field, with the limit this
|
|
2574
2592
|
/// engram enforces for it — beside the agents, never a row among them
|
|
2575
2593
|
/// (`PaymentSignCap.marketplaceRow`). Null when no marketplace is set.
|
|
2576
|
-
listPaymentSignatureCounts: (start: nat, limit: nat) -> (
|
|
2594
|
+
listPaymentSignatureCounts: (start: nat, limit: nat) -> (Result_31) query;
|
|
2577
2595
|
/// Agent records removed by a reset. Each row is a NAMED record with the fields `principal`,
|
|
2578
2596
|
/// `name`, `registeredAt` and `purgedAt` — read them BY NAME, never by position.
|
|
2579
2597
|
/// ⟨2026-09-29, the vocabulary ruling: pairing is the one verb that admits an agent⟩ The field
|
|
@@ -2613,7 +2631,7 @@ type Engram =
|
|
|
2613
2631
|
/// `invite` its enrolment named, and `ended` — why and on what day its engagement ended (its own
|
|
2614
2632
|
/// earlier ending, or the reset) — the facts `resyncAgentEdges` re-sends. The stored rows are
|
|
2615
2633
|
/// served as they are.
|
|
2616
|
-
listPurgedAgents: (start: nat, limit: nat) -> (
|
|
2634
|
+
listPurgedAgents: (start: nat, limit: nat) -> (Result_30) query;
|
|
2617
2635
|
/// ⟨0.16.0⟩ ONE ACCESSOR, folding `readReadLog` and `getDenialLog` — and the fold only became
|
|
2618
2636
|
/// safe because of a change made earlier in this same leg.
|
|
2619
2637
|
///
|
|
@@ -2675,13 +2693,13 @@ type Engram =
|
|
|
2675
2693
|
/// on the chained record — the same `RecordView` filter, and `withheld` counts what it removed
|
|
2676
2694
|
/// together with what `successFilter` removed. WHAT WOULD MAKE THIS WRONG: see `listAuditEntries`.
|
|
2677
2695
|
listReadLog: (successFilter: opt bool, start: nat, limit: nat) ->
|
|
2678
|
-
(
|
|
2696
|
+
(Result_29) query;
|
|
2679
2697
|
/// ⟨2026-10-21, round 11 b⟩ The owner's notes, oldest first. Same visibility as
|
|
2680
2698
|
/// `listRepudiations`, for the same reason: the owner and ACTIVE guardians read the rows; an agent
|
|
2681
2699
|
/// reads only the entries it caused (follow-up 16 B), and every note is the owner's, so an agent
|
|
2682
2700
|
/// gets an empty page whose `withheld` counts the notes in its window — never "there are none". A
|
|
2683
2701
|
/// stranger, a pending guardian and the anonymous caller are refused.
|
|
2684
|
-
listRecordNotes: (start: nat, limit: nat) -> (
|
|
2702
|
+
listRecordNotes: (start: nat, limit: nat) -> (Result_28) query;
|
|
2685
2703
|
/// Same visibility as listAuditEntries: the owner, this engram's agents, and ACTIVE guardians
|
|
2686
2704
|
/// see disputes. An unauthorized read REFUSES — it does not return an empty list, because an
|
|
2687
2705
|
/// empty list reads as "no disputes have been filed", which is a claim, not an absence of one.
|
|
@@ -2696,7 +2714,7 @@ type Engram =
|
|
|
2696
2714
|
/// window — which says disputes exist without showing them, never "none have been filed". WHAT
|
|
2697
2715
|
/// WOULD MAKE THIS WRONG: a ruling that an agent may see the disputes of its own writes; this would
|
|
2698
2716
|
/// then have to look up each disputed version's writer, which it does not do today.
|
|
2699
|
-
listRepudiations: (start: nat, limit: nat) -> (
|
|
2717
|
+
listRepudiations: (start: nat, limit: nat) -> (Result_27) query;
|
|
2700
2718
|
/// ⟨2026-10-21, the owner's round-11 answer f⟩ OWNER-ONLY: the sign-ins, each with the name its app
|
|
2701
2719
|
/// registered. The same tokens, in the same order and paged the same way, as `listBearerTokens`,
|
|
2702
2720
|
/// each beside `clientName` — the RFC 7591 `client_name` the app registered when the token was
|
|
@@ -2705,7 +2723,7 @@ type Engram =
|
|
|
2705
2723
|
/// apps apart. A NEW method rather than a field on `BearerToken`: that record is stored (M0170)
|
|
2706
2724
|
/// and `listBearerTokens`' reply is shipped (never widened). An agent, a guardian, a stranger and
|
|
2707
2725
|
/// the anonymous caller are refused, by `listBearerTokens`' own gate and for its reason.
|
|
2708
|
-
listSignIns: (start: nat, limit: nat) -> (
|
|
2726
|
+
listSignIns: (start: nat, limit: nat) -> (Result_26) query;
|
|
2709
2727
|
/// Owner: advance the review cursor — "I have seen everything up to and including uptoAuditId"
|
|
2710
2728
|
/// (null = everything at the current head). Bounded so the attestation can never cover entries
|
|
2711
2729
|
/// the console did not render; clamped monotonic (the cursor never moves backward) and to the
|
|
@@ -2715,7 +2733,7 @@ type Engram =
|
|
|
2715
2733
|
/// (every family qualifiesForReview admits is written to auditLogger, so they share that space),
|
|
2716
2734
|
/// and this never inspects an operation or a role. Widening what the review shows therefore
|
|
2717
2735
|
/// changes only which ids the console can pass here — it cannot desynchronise the cursor.
|
|
2718
|
-
markAgentWritesReviewed: (uptoAuditId: opt nat) -> (
|
|
2736
|
+
markAgentWritesReviewed: (uptoAuditId: opt nat) -> (Result_13);
|
|
2719
2737
|
/// ⟨2026-10-21, the owner's round-11 answer g⟩ AN AGENT READS ITS OWN GRANT — to the calling key
|
|
2720
2738
|
/// only (`People.AgentGrant`): what it may read, where it may write, its rate, and the payment
|
|
2721
2739
|
/// limits enforced against that key. It reveals nothing a refusal does not already say, and lets
|
|
@@ -2726,7 +2744,7 @@ type Engram =
|
|
|
2726
2744
|
/// owner by name (`People.OWNER_HAS_NO_GRANT`), a revoked or resigned agent ("Agent is revoked" /
|
|
2727
2745
|
/// "Agent has resigned" — an ended agent may do nothing, and its old grant would read as powers),
|
|
2728
2746
|
/// a guardian and a stranger ("Not authorized"), the anonymous caller. A query: it writes nothing.
|
|
2729
|
-
myGrant: () -> (
|
|
2747
|
+
myGrant: () -> (Result_25) query;
|
|
2730
2748
|
/// The AGENT's current key nominates the key that will replace it. Nothing moves yet: the new
|
|
2731
2749
|
/// key must accept, by its own call, within 24 hours (`acceptAgentKeyNomination`). One pending
|
|
2732
2750
|
/// nomination per agent — a new one replaces the earlier one, and the record says which. Refused,
|
|
@@ -2761,15 +2779,15 @@ type Engram =
|
|
|
2761
2779
|
///
|
|
2762
2780
|
/// WHAT WOULD MAKE THIS WRONG: an await added between `ChildAllowance.take` and the registry call; the
|
|
2763
2781
|
/// registry's `CHILD_MIN_ATTACHED_CYCLES` moving without `CHILD_ATTACH_CYCLES`.
|
|
2764
|
-
openChildEngram: () -> (
|
|
2765
|
-
openSession: (config: SessionConfig, sig: PaymentSignature) -> (
|
|
2782
|
+
openChildEngram: () -> (Result_24);
|
|
2783
|
+
openSession: (config: SessionConfig, sig: PaymentSignature) -> (Result_23);
|
|
2766
2784
|
/// Withdraw tokens to the owner's principal. This is the ONLY way to
|
|
2767
2785
|
/// move tokens out of the engram to an external address, and the
|
|
2768
2786
|
/// destination is always hardcoded to the owner.
|
|
2769
2787
|
/// NOT freeze-gated: the owner always controls their own funds.
|
|
2770
2788
|
/// Guardian freeze only blocks agent/public operations.
|
|
2771
2789
|
ownerWithdraw: (amount: TokenAmount, ownerAuth: opt ActionAuth) ->
|
|
2772
|
-
(
|
|
2790
|
+
(Result_13);
|
|
2773
2791
|
/// ⟨0.16.0⟩ `payRentFromEarnings` DELETED — ruled TWICE (B1 and B2), and it was the single
|
|
2774
2792
|
/// clearest violation of the OSS/platform split in this repo.
|
|
2775
2793
|
///
|
|
@@ -2827,7 +2845,7 @@ type Engram =
|
|
|
2827
2845
|
pairAgent: (arg: record {
|
|
2828
2846
|
code: text;
|
|
2829
2847
|
enrolment: Enrolment;
|
|
2830
|
-
}) -> (
|
|
2848
|
+
}) -> (Result_22);
|
|
2831
2849
|
/// ⟨0.16.0, L2.2 — renamed from `guardianPauseWrites`⟩ Same correction as freezePayments above:
|
|
2832
2850
|
/// owner-or-guardian, and `resumeWrites` never carried the prefix either.
|
|
2833
2851
|
pauseWrites: () -> (Result_1);
|
|
@@ -2852,7 +2870,7 @@ type Engram =
|
|
|
2852
2870
|
///
|
|
2853
2871
|
/// `unlocked` is the export-receipt gate ONLY. It is not a promise the condense will land: the
|
|
2854
2872
|
/// history-budget delta is checked at commit time and can still refuse a short prefix.
|
|
2855
|
-
previewCondense: (toSeq: nat) -> (
|
|
2873
|
+
previewCondense: (toSeq: nat) -> (Result_21) query;
|
|
2856
2874
|
/// A quote for a session this caller has not opened and is not committed to — the intent a
|
|
2857
2875
|
/// buyer signs against. Pure dry run, no state, no funds.
|
|
2858
2876
|
///
|
|
@@ -2900,7 +2918,7 @@ type Engram =
|
|
|
2900
2918
|
previewRetention: (entries: vec record {
|
|
2901
2919
|
text;
|
|
2902
2920
|
RetentionClassSpec;
|
|
2903
|
-
}) -> (
|
|
2921
|
+
}) -> (Result_20) query;
|
|
2904
2922
|
/// Read one memory file at its current version.
|
|
2905
2923
|
///
|
|
2906
2924
|
/// Gated on the `read_memory` permission, so an agent holding that grant reaches it — unlike
|
|
@@ -2915,7 +2933,7 @@ type Engram =
|
|
|
2915
2933
|
/// counter here could never persist; read counting lives on the update path
|
|
2916
2934
|
/// (`sessionReadContext` and the MCP reads). A caller measuring engram usage from this method
|
|
2917
2935
|
/// will measure nothing.
|
|
2918
|
-
readMemory: (path: text) -> (
|
|
2936
|
+
readMemory: (path: text) -> (Result_11) query;
|
|
2919
2937
|
/// Read many paths in one call. Per-path Results are KEPT — partial success is the point, and
|
|
2920
2938
|
/// one unreadable path must not fail the other nine.
|
|
2921
2939
|
///
|
|
@@ -2931,7 +2949,7 @@ type Engram =
|
|
|
2931
2949
|
/// Both are now what they are: a single `#Err` for the whole call. `#Ok` still carries a row per
|
|
2932
2950
|
/// path, each with its own Result — a refused RESERVED path sits beside a readable one, which is
|
|
2933
2951
|
/// a genuine per-path fact.
|
|
2934
|
-
readMemoryBatch: (paths: vec text) -> (
|
|
2952
|
+
readMemoryBatch: (paths: vec text) -> (Result_19) query;
|
|
2935
2953
|
/// ⟨0.16.0⟩ `getMemoryRetentionGuards` DELETED — folded into `getMemoryRetentionPolicy` above.
|
|
2936
2954
|
/// It was the second L2.1 array-returning `get*`, and separating it from the policy it modifies
|
|
2937
2955
|
/// was the defect described there. Its own docs are preserved at the fold site.
|
|
@@ -2942,7 +2960,7 @@ type Engram =
|
|
|
2942
2960
|
/// see it cannot know whether it has the whole range, which is how silent truncation gets
|
|
2943
2961
|
/// reintroduced. Loop while `more` is true, advancing by the bytes actually returned.
|
|
2944
2962
|
readMemoryBytes: (path: text, offset: nat, len: nat, version: opt nat) ->
|
|
2945
|
-
(
|
|
2963
|
+
(Result_18) query;
|
|
2946
2964
|
/// The escrow exit for a session whose settle cannot pay.
|
|
2947
2965
|
///
|
|
2948
2966
|
/// PAYER-ONLY, enforced inside the gateway, and deliberately not owner-triggered: the payer's own
|
|
@@ -3005,7 +3023,7 @@ type Engram =
|
|
|
3005
3023
|
/// was the block index alone, which read as the amount. If the session's record is removed before
|
|
3006
3024
|
/// the amount can be read back — a session closed in the same moment as the recovery and cleaned up
|
|
3007
3025
|
/// during its transfer — it answers `#Other` naming the block, never a guessed amount.
|
|
3008
|
-
recoverEscrow: (sessionId: text, amountE6: nat) -> (
|
|
3026
|
+
recoverEscrow: (sessionId: text, amountE6: nat) -> (Result_17);
|
|
3009
3027
|
/// ⟨0.16.0, L1⟩ A REDEMPTION PATH, where the arm choice is a disclosure decision.
|
|
3010
3028
|
///
|
|
3011
3029
|
/// Four of these refusals are about the CODE and one is about the caller. The code arms restate
|
|
@@ -3019,7 +3037,7 @@ type Engram =
|
|
|
3019
3037
|
/// rather than `()`. The new guardian learns, in the same reply, the name and permissions the
|
|
3020
3038
|
/// owner's invite gave them and that they cannot act until approved; before, that took a second
|
|
3021
3039
|
/// read they had no reason to know to make.
|
|
3022
|
-
registerGuardian: (code: text) -> (
|
|
3040
|
+
registerGuardian: (code: text) -> (Result_16);
|
|
3023
3041
|
/// Remove a per-caller override so that caller reverts to — and keeps TRACKING — the global caps.
|
|
3024
3042
|
///
|
|
3025
3043
|
/// It travels with its pair and is never dropped alone: without it the only way "back" from an
|
|
@@ -3065,7 +3083,7 @@ type Engram =
|
|
|
3065
3083
|
/// the original audit entry stay exactly where they were; this appends a chained
|
|
3066
3084
|
/// `memory.repudiate` entry and lists the (path, version) so readers can see the dispute.
|
|
3067
3085
|
repudiateMemoryWrite: (path: text, version: nat, reason: text) ->
|
|
3068
|
-
(
|
|
3086
|
+
(Result_13);
|
|
3069
3087
|
/// ⚠ OWNER-ONLY BULK RESET. Destructive, and wider than its name suggests.
|
|
3070
3088
|
///
|
|
3071
3089
|
/// It severs EVERY grant surface that can outlive a role — agents, guardians, invites and
|
|
@@ -3093,7 +3111,7 @@ type Engram =
|
|
|
3093
3111
|
/// NOT unbounded. It caps at MAX_ENTRIES and trims its oldest tenth on overflow, so on any engram
|
|
3094
3112
|
/// long-lived enough for the rent model to apply, the reset entry is not guaranteed to still be
|
|
3095
3113
|
/// there. `agentPurgeLog` is the evidence that does not age out — which is why it exists.
|
|
3096
|
-
resetEngram: () -> (
|
|
3114
|
+
resetEngram: () -> (Result_15);
|
|
3097
3115
|
/// ⟨2026-09-28, owner decision: an agent can resign from an engram, and the resignation is
|
|
3098
3116
|
/// recorded⟩ The AGENT ends its own engagement with this engram.
|
|
3099
3117
|
///
|
|
@@ -3139,7 +3157,7 @@ type Engram =
|
|
|
3139
3157
|
/// all that is left to send is the ending, and the registry has nothing to end. The report lists
|
|
3140
3158
|
/// each such engagement under `cannotBeRecorded` (key, root, invite, and how and when it ended),
|
|
3141
3159
|
/// apart from `notRecorded`, so the owner sees them rather than silence.
|
|
3142
|
-
resyncAgentEdges: () -> (
|
|
3160
|
+
resyncAgentEdges: () -> (Result_14);
|
|
3143
3161
|
/// Return to managed custody: the engram adds the registry back as a controller ALONGSIDE the
|
|
3144
3162
|
/// owner — it does not remove the owner. The inverse of `claimSovereignty`, and the reason
|
|
3145
3163
|
/// sovereignty is not a one-way door.
|
|
@@ -3193,7 +3211,7 @@ type Engram =
|
|
|
3193
3211
|
/// written, and only then does it await one notification per revoked agent. So a notification
|
|
3194
3212
|
/// that fails leaves the agents revoked here regardless — a partial notify is not a partial
|
|
3195
3213
|
/// revocation, which is the direction that matters for a panic button.
|
|
3196
|
-
revokeAllAgents: () -> (
|
|
3214
|
+
revokeAllAgents: () -> (Result_13);
|
|
3197
3215
|
/// Owner-only panic button: revoke every connector bearer token at once. Returns how many.
|
|
3198
3216
|
///
|
|
3199
3217
|
/// The THIRD independent surface — hosted connectors authenticate with bearer tokens, not with
|
|
@@ -3202,7 +3220,7 @@ type Engram =
|
|
|
3202
3220
|
/// holding a live session.
|
|
3203
3221
|
///
|
|
3204
3222
|
/// Tokens are re-issuable: revoking them is not permanent the way revoking an agent is.
|
|
3205
|
-
revokeAllBearerTokens: () -> (
|
|
3223
|
+
revokeAllBearerTokens: () -> (Result_13);
|
|
3206
3224
|
/// ⟨0.16.0⟩ `removeAllGuardians` DELETED — test-only (L6), and verified NOT part of KILL-SWITCH's
|
|
3207
3225
|
/// mass-revoke set. The destructive phase-07 suite iterates `removeGuardian` instead, so nothing
|
|
3208
3226
|
/// loses a capability: what dies is a bulk spelling no runbook ever invoked.
|
|
@@ -3214,7 +3232,7 @@ type Engram =
|
|
|
3214
3232
|
///
|
|
3215
3233
|
/// Unlike revoking an agent, this costs nothing permanently — an invite is a one-time code,
|
|
3216
3234
|
/// so voiding it and minting a fresh one is the ordinary path.
|
|
3217
|
-
revokeAllInvites: () -> (
|
|
3235
|
+
revokeAllInvites: () -> (Result_13);
|
|
3218
3236
|
/// Revoke a bearer token by its public tokenId. Idempotent.
|
|
3219
3237
|
/// Subsequent /mcp requests using this token will be rejected.
|
|
3220
3238
|
revokeBearerToken: (tokenId: text) -> (Result_1);
|
|
@@ -3284,7 +3302,7 @@ type Engram =
|
|
|
3284
3302
|
/// ⚠ RAW STORED BYTES, like `readMemoryBatch`. On a Private (encrypted) engram the content is
|
|
3285
3303
|
/// CIPHERTEXT; the key-holding SDK decrypts it. A caller without the key gets bytes it cannot
|
|
3286
3304
|
/// read, not an error.
|
|
3287
|
-
sessionReadContext: (clientLabel: text) -> (
|
|
3305
|
+
sessionReadContext: (clientLabel: text) -> (Result_12);
|
|
3288
3306
|
/// Read one memory file against a PAID x402 session voucher. No role, no invite — the voucher is
|
|
3289
3307
|
/// the authorization, which is what makes this the engram's one rail a stranger can pay to use.
|
|
3290
3308
|
///
|
|
@@ -3314,7 +3332,7 @@ type Engram =
|
|
|
3314
3332
|
/// session must not be the side door: without this guard a stranger holding a fraction-of-a-
|
|
3315
3333
|
/// cent voucher could read `secrets/*`.
|
|
3316
3334
|
/// · Payments are frozen on this engram.
|
|
3317
|
-
sessionReadMemory: (voucher: Voucher, path: text) -> (
|
|
3335
|
+
sessionReadMemory: (voucher: Voucher, path: text) -> (Result_11);
|
|
3318
3336
|
/// Configure action alerts: an https webhook that receives new chained-audit entries matching the
|
|
3319
3337
|
/// enabled event classes (money / approvals / guardian / agentWrites), batched, at most one
|
|
3320
3338
|
/// POST per minute. Owner-only. Payloads carry audit METADATA (operation, caller, role, bounded
|
|
@@ -3360,7 +3378,7 @@ type Engram =
|
|
|
3360
3378
|
/// own, and this setter applies the number to every creator's set, so `prunedBackups` counts
|
|
3361
3379
|
/// across all of them. "The write is the read" above went stale for a second phone, which never
|
|
3362
3380
|
/// made the write: `getBackupRetention` is the read.
|
|
3363
|
-
setBackupRetention: (dbType: text, maxBackups: nat) -> (
|
|
3381
|
+
setBackupRetention: (dbType: text, maxBackups: nat) -> (Result_10);
|
|
3364
3382
|
/// Override the caps for ONE caller — an agent this owner trusts more, or less, than the rest.
|
|
3365
3383
|
setCallerSpendPolicy: (caller: principal, policy: SpendingPolicy) ->
|
|
3366
3384
|
(Result_1);
|
|
@@ -3596,7 +3614,7 @@ type Engram =
|
|
|
3596
3614
|
maxFeePerGas: nat;
|
|
3597
3615
|
maxPriorityFeePerGas: nat;
|
|
3598
3616
|
nonce: nat;
|
|
3599
|
-
}) -> (
|
|
3617
|
+
}) -> (Result_9);
|
|
3600
3618
|
/// Sign an EIP-3009 authorization for x402 payment. Agent-accessible.
|
|
3601
3619
|
/// Client probes the URL, extracts chain/token/recipient/amount from the 402, and calls this.
|
|
3602
3620
|
/// Canister signs → returns header → client retries with header.
|
|
@@ -3684,7 +3702,7 @@ type Engram =
|
|
|
3684
3702
|
/// owner can see every time the reader read. A refusal is `#Refused` naming this method and the
|
|
3685
3703
|
/// class (`SeatWeeks.readRefusal`), never an empty list: an empty list is a real answer ("no agent
|
|
3686
3704
|
/// has paired here"), and a fabricated one would be counted as one.
|
|
3687
|
-
sysGetAgentSeatWeeks: () -> (
|
|
3705
|
+
sysGetAgentSeatWeeks: () -> (Result_8);
|
|
3688
3706
|
/// The metrics reader the registry designated reads this engram's paid-rail health, in one call:
|
|
3689
3707
|
/// the balance and the line it must stay above, the memory that line is computed from, the sessions
|
|
3690
3708
|
/// by state, the escrow open sessions hold, the vouchers spent and the refused ones
|
|
@@ -3706,7 +3724,7 @@ type Engram =
|
|
|
3706
3724
|
/// (`RailHealth.readRefusal`), never a zero balance: a made-up zero would read as an engram about
|
|
3707
3725
|
/// to freeze. Called by another canister, a query runs replicated and this engram pays for it —
|
|
3708
3726
|
/// a few million cycles an hour, the cost of being watched.
|
|
3709
|
-
sysGetRailHealth: () -> (
|
|
3727
|
+
sysGetRailHealth: () -> (Result_7) query;
|
|
3710
3728
|
/// The cashier reads how many signatures this engram has produced, per caller and in total.
|
|
3711
3729
|
/// ⟨2026-09-28⟩ The owner's decision of that date: a running counter on the engram, exported to
|
|
3712
3730
|
/// the cashier — and to nobody else (`AccessControl.requireCashierForSignatureCounts`).
|
|
@@ -3729,7 +3747,20 @@ type Engram =
|
|
|
3729
3747
|
/// bills from this: the number comes from a canister its owner controls and can reinstall, so bill
|
|
3730
3748
|
/// only engrams the registry confirms run published code, and read a lower count than last time as
|
|
3731
3749
|
/// a reinstall — the reasoning is at `signaturesByCaller`.
|
|
3732
|
-
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);
|
|
3733
3764
|
/// Rent lifecycle notice — how the OWNER (not the agent) learns their subscription lapsed. D6
|
|
3734
3765
|
/// shipped the handoff but every alarm it added talks to the operating service's watchdog; the
|
|
3735
3766
|
/// doc named the debt plainly: "an owner learns of their own lapse only by looking." This closes
|
|
@@ -3808,6 +3839,28 @@ type Engram =
|
|
|
3808
3839
|
paidThroughNs: opt int;
|
|
3809
3840
|
scheduleVersion: opt text;
|
|
3810
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);
|
|
3811
3864
|
/// Point this engram at the biller that converts its tokens → cycles. Settable, not hardcoded:
|
|
3812
3865
|
/// coupling is by principal id, so the same wasm runs against any deployment's biller.
|
|
3813
3866
|
///
|
|
@@ -3824,6 +3877,21 @@ type Engram =
|
|
|
3824
3877
|
/// nobody but the spawning registry can fix it. That refusal therefore names the real remedy
|
|
3825
3878
|
/// rather than telling an owner to run a call they can no longer make.
|
|
3826
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);
|
|
3827
3895
|
/// Point this engram at the commerce satellite allowed to ask it for signatures. ⟨0.16.0, B1⟩
|
|
3828
3896
|
///
|
|
3829
3897
|
/// SAME AUTHORITY AS `sysSetBillerId`, and for a stronger reason. That one routes money; this one
|
|
@@ -3850,7 +3918,10 @@ type Engram =
|
|
|
3850
3918
|
/// A CANISTER ONLY: a person's principal, the anonymous principal or the management canister is
|
|
3851
3919
|
/// refused `#Invalid` and nothing changes — a person named here would be handed this engram's seat
|
|
3852
3920
|
/// counts. Set or replaced, never cleared: the owner's control is the switch
|
|
3853
|
-
/// (`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
|
|
3854
3925
|
/// (`metrics.sysSetMetricsReaderId`) is the evidence of when the read was granted, and to whom.
|
|
3855
3926
|
sysSetMetricsReaderId: (reader: principal) -> (Result_1);
|
|
3856
3927
|
/// The market asks this engram to sign a registered type — B1's seam, settlement leg. ⟨0.16.0⟩
|
|
@@ -4169,6 +4240,16 @@ type BrakePull =
|
|
|
4169
4240
|
reason: opt text;
|
|
4170
4241
|
role: BrakeRole;
|
|
4171
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
|
+
};
|
|
4172
4253
|
type BearerTokenStatus =
|
|
4173
4254
|
variant {
|
|
4174
4255
|
Active;
|