@engramx/idl 0.16.0-rc.5 → 0.16.0-rc.6
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 +143 -121
- package/dist/engram.idl.d.ts +137 -120
- package/dist/engram.idl.js +125 -120
- package/dist/market.did +86 -35
- package/dist/market.idl.d.ts +83 -35
- package/dist/market.idl.js +41 -35
- package/package.json +1 -1
package/dist/engram.did
CHANGED
|
@@ -220,11 +220,16 @@ type Result_8 =
|
|
|
220
220
|
Err: Error;
|
|
221
221
|
Ok: nat;
|
|
222
222
|
};
|
|
223
|
-
type
|
|
223
|
+
type Result_71 =
|
|
224
224
|
variant {
|
|
225
225
|
Err: Error;
|
|
226
226
|
Ok: AgentRecord;
|
|
227
227
|
};
|
|
228
|
+
type Result_70 =
|
|
229
|
+
variant {
|
|
230
|
+
Err: Error;
|
|
231
|
+
Ok: Eip712Registration;
|
|
232
|
+
};
|
|
228
233
|
type Result_7 =
|
|
229
234
|
variant {
|
|
230
235
|
Err: Error;
|
|
@@ -233,47 +238,47 @@ type Result_7 =
|
|
|
233
238
|
type Result_69 =
|
|
234
239
|
variant {
|
|
235
240
|
Err: Error;
|
|
236
|
-
Ok:
|
|
241
|
+
Ok: record {activatesAtNs: int;};
|
|
237
242
|
};
|
|
238
243
|
type Result_68 =
|
|
239
244
|
variant {
|
|
240
245
|
Err: Error;
|
|
241
|
-
Ok:
|
|
246
|
+
Ok: CondenseResult;
|
|
242
247
|
};
|
|
243
248
|
type Result_67 =
|
|
244
249
|
variant {
|
|
245
250
|
Err: Error;
|
|
246
|
-
Ok:
|
|
251
|
+
Ok: MemoryRangeExport;
|
|
247
252
|
};
|
|
248
|
-
type
|
|
253
|
+
type Result_65 =
|
|
249
254
|
variant {
|
|
250
255
|
Err: Error;
|
|
251
|
-
Ok:
|
|
256
|
+
Ok: Page_21;
|
|
252
257
|
};
|
|
253
258
|
type Result_64 =
|
|
254
259
|
variant {
|
|
255
260
|
Err: Error;
|
|
256
|
-
Ok:
|
|
261
|
+
Ok: AgentWriteReview;
|
|
257
262
|
};
|
|
258
263
|
type Result_63 =
|
|
259
264
|
variant {
|
|
260
265
|
Err: Error;
|
|
261
|
-
Ok:
|
|
266
|
+
Ok: BackupMetadata;
|
|
262
267
|
};
|
|
263
268
|
type Result_62 =
|
|
264
269
|
variant {
|
|
265
270
|
Err: Error;
|
|
266
|
-
Ok:
|
|
271
|
+
Ok: ChildAllowanceRow;
|
|
267
272
|
};
|
|
268
273
|
type Result_61 =
|
|
269
274
|
variant {
|
|
270
275
|
Err: Error;
|
|
271
|
-
Ok:
|
|
276
|
+
Ok: ChildOpening;
|
|
272
277
|
};
|
|
273
278
|
type Result_60 =
|
|
274
279
|
variant {
|
|
275
280
|
Err: Error;
|
|
276
|
-
Ok:
|
|
281
|
+
Ok: blob;
|
|
277
282
|
};
|
|
278
283
|
type Result_6 =
|
|
279
284
|
variant {
|
|
@@ -283,52 +288,52 @@ type Result_6 =
|
|
|
283
288
|
type Result_59 =
|
|
284
289
|
variant {
|
|
285
290
|
Err: Error;
|
|
286
|
-
Ok:
|
|
291
|
+
Ok: EvmAddresses;
|
|
287
292
|
};
|
|
288
293
|
type Result_58 =
|
|
289
294
|
variant {
|
|
290
295
|
Err: Error;
|
|
291
|
-
Ok:
|
|
296
|
+
Ok: AlertStatus;
|
|
292
297
|
};
|
|
293
298
|
type Result_57 =
|
|
294
299
|
variant {
|
|
295
300
|
Err: Error;
|
|
296
|
-
Ok:
|
|
301
|
+
Ok: MemoryHistory;
|
|
297
302
|
};
|
|
298
303
|
type Result_56 =
|
|
299
304
|
variant {
|
|
300
305
|
Err: Error;
|
|
301
|
-
Ok:
|
|
306
|
+
Ok: MemoryRetentionPolicy;
|
|
302
307
|
};
|
|
303
308
|
type Result_55 =
|
|
304
309
|
variant {
|
|
305
310
|
Err: Error;
|
|
306
|
-
Ok:
|
|
311
|
+
Ok: OwnerConsole;
|
|
307
312
|
};
|
|
308
313
|
type Result_54 =
|
|
309
314
|
variant {
|
|
310
315
|
Err: Error;
|
|
311
|
-
Ok:
|
|
316
|
+
Ok: record {paths: vec text;};
|
|
312
317
|
};
|
|
313
318
|
type Result_53 =
|
|
314
319
|
variant {
|
|
315
320
|
Err: Error;
|
|
316
|
-
Ok:
|
|
321
|
+
Ok: SigningFloorStatus;
|
|
317
322
|
};
|
|
318
323
|
type Result_52 =
|
|
319
324
|
variant {
|
|
320
325
|
Err: Error;
|
|
321
|
-
Ok:
|
|
326
|
+
Ok: SpendCeiling;
|
|
322
327
|
};
|
|
323
328
|
type Result_51 =
|
|
324
329
|
variant {
|
|
325
330
|
Err: Error;
|
|
326
|
-
Ok:
|
|
331
|
+
Ok: SpendingPolicy;
|
|
327
332
|
};
|
|
328
333
|
type Result_50 =
|
|
329
334
|
variant {
|
|
330
335
|
Err: Error;
|
|
331
|
-
Ok:
|
|
336
|
+
Ok: StorageReport;
|
|
332
337
|
};
|
|
333
338
|
type Result_5 =
|
|
334
339
|
variant {
|
|
@@ -338,52 +343,52 @@ type Result_5 =
|
|
|
338
343
|
type Result_49 =
|
|
339
344
|
variant {
|
|
340
345
|
Err: Error;
|
|
341
|
-
Ok:
|
|
346
|
+
Ok: WalletBalances;
|
|
342
347
|
};
|
|
343
348
|
type Result_48 =
|
|
344
349
|
variant {
|
|
345
350
|
Err: Error;
|
|
346
|
-
Ok:
|
|
351
|
+
Ok: WorldIdConfig;
|
|
347
352
|
};
|
|
348
353
|
type Result_47 =
|
|
349
354
|
variant {
|
|
350
355
|
Err: Error;
|
|
351
|
-
Ok:
|
|
356
|
+
Ok: WorldIdRpContext;
|
|
352
357
|
};
|
|
353
358
|
type Result_46 =
|
|
354
359
|
variant {
|
|
355
360
|
Err: Error;
|
|
356
|
-
Ok:
|
|
361
|
+
Ok: opt text;
|
|
357
362
|
};
|
|
358
363
|
type Result_45 =
|
|
359
364
|
variant {
|
|
360
365
|
Err: Error;
|
|
361
|
-
Ok:
|
|
366
|
+
Ok: bool;
|
|
362
367
|
};
|
|
363
368
|
type Result_44 =
|
|
364
369
|
variant {
|
|
365
370
|
Err: Error;
|
|
366
|
-
Ok:
|
|
371
|
+
Ok: text;
|
|
367
372
|
};
|
|
368
373
|
type Result_43 =
|
|
369
374
|
variant {
|
|
370
375
|
Err: Error;
|
|
371
|
-
Ok:
|
|
376
|
+
Ok: Page_20;
|
|
372
377
|
};
|
|
373
378
|
type Result_42 =
|
|
374
379
|
variant {
|
|
375
380
|
Err: Error;
|
|
376
|
-
Ok:
|
|
381
|
+
Ok: Page_19;
|
|
377
382
|
};
|
|
378
383
|
type Result_41 =
|
|
379
384
|
variant {
|
|
380
385
|
Err: Error;
|
|
381
|
-
Ok:
|
|
386
|
+
Ok: Page_18;
|
|
382
387
|
};
|
|
383
388
|
type Result_40 =
|
|
384
389
|
variant {
|
|
385
390
|
Err: Error;
|
|
386
|
-
Ok:
|
|
391
|
+
Ok: Page_17;
|
|
387
392
|
};
|
|
388
393
|
type Result_4 =
|
|
389
394
|
variant {
|
|
@@ -393,52 +398,52 @@ type Result_4 =
|
|
|
393
398
|
type Result_39 =
|
|
394
399
|
variant {
|
|
395
400
|
Err: Error;
|
|
396
|
-
Ok:
|
|
401
|
+
Ok: Page_16;
|
|
397
402
|
};
|
|
398
403
|
type Result_38 =
|
|
399
404
|
variant {
|
|
400
405
|
Err: Error;
|
|
401
|
-
Ok:
|
|
406
|
+
Ok: CheckpointPage;
|
|
402
407
|
};
|
|
403
408
|
type Result_37 =
|
|
404
409
|
variant {
|
|
405
410
|
Err: Error;
|
|
406
|
-
Ok:
|
|
411
|
+
Ok: Page_14;
|
|
407
412
|
};
|
|
408
413
|
type Result_36 =
|
|
409
414
|
variant {
|
|
410
415
|
Err: Error;
|
|
411
|
-
Ok:
|
|
416
|
+
Ok: Page_13;
|
|
412
417
|
};
|
|
413
418
|
type Result_35 =
|
|
414
419
|
variant {
|
|
415
420
|
Err: Error;
|
|
416
|
-
Ok:
|
|
421
|
+
Ok: Page_12;
|
|
417
422
|
};
|
|
418
423
|
type Result_34 =
|
|
419
424
|
variant {
|
|
420
425
|
Err: Error;
|
|
421
|
-
Ok:
|
|
426
|
+
Ok: Page_11;
|
|
422
427
|
};
|
|
423
428
|
type Result_33 =
|
|
424
429
|
variant {
|
|
425
430
|
Err: Error;
|
|
426
|
-
Ok:
|
|
431
|
+
Ok: Page_10;
|
|
427
432
|
};
|
|
428
433
|
type Result_32 =
|
|
429
434
|
variant {
|
|
430
435
|
Err: Error;
|
|
431
|
-
Ok:
|
|
436
|
+
Ok: ReceiptPage;
|
|
432
437
|
};
|
|
433
438
|
type Result_31 =
|
|
434
439
|
variant {
|
|
435
440
|
Err: Error;
|
|
436
|
-
Ok:
|
|
441
|
+
Ok: Page_8;
|
|
437
442
|
};
|
|
438
443
|
type Result_30 =
|
|
439
444
|
variant {
|
|
440
445
|
Err: Error;
|
|
441
|
-
Ok:
|
|
446
|
+
Ok: LogPage;
|
|
442
447
|
};
|
|
443
448
|
type Result_3 =
|
|
444
449
|
variant {
|
|
@@ -448,52 +453,52 @@ type Result_3 =
|
|
|
448
453
|
type Result_29 =
|
|
449
454
|
variant {
|
|
450
455
|
Err: Error;
|
|
451
|
-
Ok:
|
|
456
|
+
Ok: Page_6;
|
|
452
457
|
};
|
|
453
458
|
type Result_28 =
|
|
454
459
|
variant {
|
|
455
460
|
Err: Error;
|
|
456
|
-
Ok:
|
|
461
|
+
Ok: Page_5;
|
|
457
462
|
};
|
|
458
463
|
type Result_27 =
|
|
459
464
|
variant {
|
|
460
465
|
Err: Error;
|
|
461
|
-
Ok:
|
|
466
|
+
Ok: Page_4;
|
|
462
467
|
};
|
|
463
468
|
type Result_26 =
|
|
464
469
|
variant {
|
|
465
470
|
Err: Error;
|
|
466
|
-
Ok:
|
|
471
|
+
Ok: PaymentSignatureCounts;
|
|
467
472
|
};
|
|
468
473
|
type Result_25 =
|
|
469
474
|
variant {
|
|
470
475
|
Err: Error;
|
|
471
|
-
Ok:
|
|
476
|
+
Ok: Page_2;
|
|
472
477
|
};
|
|
473
478
|
type Result_24 =
|
|
474
479
|
variant {
|
|
475
480
|
Err: Error;
|
|
476
|
-
Ok:
|
|
481
|
+
Ok: Page_1;
|
|
477
482
|
};
|
|
478
483
|
type Result_23 =
|
|
479
484
|
variant {
|
|
480
485
|
Err: Error;
|
|
481
|
-
Ok:
|
|
486
|
+
Ok: Page;
|
|
482
487
|
};
|
|
483
488
|
type Result_22 =
|
|
484
489
|
variant {
|
|
485
490
|
Err: Error;
|
|
486
|
-
Ok:
|
|
491
|
+
Ok: principal;
|
|
487
492
|
};
|
|
488
493
|
type Result_21 =
|
|
489
494
|
variant {
|
|
490
495
|
Err: Error;
|
|
491
|
-
Ok:
|
|
496
|
+
Ok: EngramSessionState;
|
|
492
497
|
};
|
|
493
498
|
type Result_20 =
|
|
494
499
|
variant {
|
|
495
500
|
Err: Error;
|
|
496
|
-
Ok:
|
|
501
|
+
Ok: Pairing;
|
|
497
502
|
};
|
|
498
503
|
type Result_2 =
|
|
499
504
|
variant {
|
|
@@ -503,22 +508,22 @@ type Result_2 =
|
|
|
503
508
|
type Result_19 =
|
|
504
509
|
variant {
|
|
505
510
|
Err: Error;
|
|
506
|
-
Ok:
|
|
511
|
+
Ok: CondensePreview;
|
|
507
512
|
};
|
|
508
513
|
type Result_18 =
|
|
509
514
|
variant {
|
|
510
515
|
Err: Error;
|
|
511
|
-
Ok:
|
|
516
|
+
Ok: vec BatchReadItem;
|
|
512
517
|
};
|
|
513
518
|
type Result_17 =
|
|
514
519
|
variant {
|
|
515
520
|
Err: Error;
|
|
516
|
-
Ok:
|
|
521
|
+
Ok: MemoryByteChunk;
|
|
517
522
|
};
|
|
518
523
|
type Result_16 =
|
|
519
524
|
variant {
|
|
520
525
|
Err: Error;
|
|
521
|
-
Ok:
|
|
526
|
+
Ok: EngramEscrowRecovery;
|
|
522
527
|
};
|
|
523
528
|
type Result_15 =
|
|
524
529
|
variant {
|
|
@@ -1139,6 +1144,11 @@ type EngramSessionState =
|
|
|
1139
1144
|
status: EngramSessionStatus;
|
|
1140
1145
|
voucherCount: nat;
|
|
1141
1146
|
};
|
|
1147
|
+
type EngramEscrowRecovery =
|
|
1148
|
+
record {
|
|
1149
|
+
amountE6: nat;
|
|
1150
|
+
blockIndex: nat;
|
|
1151
|
+
};
|
|
1142
1152
|
type Engram =
|
|
1143
1153
|
service {
|
|
1144
1154
|
/// ⟨0.16.0⟩ `about()` — the ONE public projection, replacing `status()` and absorbing `metrics()`.
|
|
@@ -1170,7 +1180,7 @@ type Engram =
|
|
|
1170
1180
|
/// nomination names. That check compares the caller inside the module, where
|
|
1171
1181
|
/// test/key-replacement.test.mo runs it; this body names no roster gate, because the caller holds
|
|
1172
1182
|
/// no role here until the move.
|
|
1173
|
-
acceptAgentKeyNomination: (agentKey: principal) -> (
|
|
1183
|
+
acceptAgentKeyNomination: (agentKey: principal) -> (Result_71);
|
|
1174
1184
|
/// Consensus transform for the alert webhook outcall: collapse the response to status-only so
|
|
1175
1185
|
/// replicas agree regardless of response headers/body (we only care that the POST landed 2xx).
|
|
1176
1186
|
///
|
|
@@ -1206,10 +1216,10 @@ type Engram =
|
|
|
1206
1216
|
};
|
|
1207
1217
|
primaryType: text;
|
|
1208
1218
|
verifyingContract: text;
|
|
1209
|
-
}) -> (
|
|
1219
|
+
}) -> (Result_70);
|
|
1210
1220
|
/// Owner-managed destination allowlist (D7). Additions LOOSEN and wait 24h; removals TIGHTEN
|
|
1211
1221
|
/// and apply instantly — the ratified asymmetry, applied to the one mutable policy surface.
|
|
1212
|
-
addEvmWithdrawDestination: (dest: text) -> (
|
|
1222
|
+
addEvmWithdrawDestination: (dest: text) -> (Result_69);
|
|
1213
1223
|
/// ⟨0.16.0, L1⟩ THE ROLE-CONFLICT ARM, and why three refusals here are not the same refusal.
|
|
1214
1224
|
///
|
|
1215
1225
|
/// This method had five distinct ways to say no through one `text`, and a caller could only tell
|
|
@@ -1251,7 +1261,7 @@ type Engram =
|
|
|
1251
1261
|
/// Gated on requireWritesNotPaused — unlike the export. This one destroys retained entries, which
|
|
1252
1262
|
/// is exactly what a guardian pause exists to hold. No action alert is raised: the operation is
|
|
1253
1263
|
/// owner-initiated, owner-only, and already chained into the audit log.
|
|
1254
|
-
applyCondense: (toSeq: nat) -> (
|
|
1264
|
+
applyCondense: (toSeq: nat) -> (Result_68);
|
|
1255
1265
|
/// Owner-only: activate a guardian who has registered against an invite.
|
|
1256
1266
|
///
|
|
1257
1267
|
/// Until this call the guardian is `#Pending` and can do NOTHING — registering is a claim, this
|
|
@@ -1322,13 +1332,13 @@ type Engram =
|
|
|
1322
1332
|
///
|
|
1323
1333
|
/// The write half also refuses while writes are PAUSED.
|
|
1324
1334
|
backupInit: (dbType: text, backupType: BackupType, parentBackupId:
|
|
1325
|
-
opt text, sha256: text, backupLabel: opt text) -> (
|
|
1335
|
+
opt text, sha256: text, backupLabel: opt text) -> (Result_44);
|
|
1326
1336
|
/// Read one chunk of a finalized backup, by index.
|
|
1327
1337
|
///
|
|
1328
1338
|
/// ⚠ GATED ON `read_backup`, which is NOT the permission the upload half uses — that one is
|
|
1329
1339
|
/// `canAppendMemory`. Holding one says nothing about the other, deliberately: taking a backup and
|
|
1330
1340
|
/// carrying it away are different authorities.
|
|
1331
|
-
backupPullChunk: (backupId: text, chunkIndex: nat) -> (
|
|
1341
|
+
backupPullChunk: (backupId: text, chunkIndex: nat) -> (Result_60) query;
|
|
1332
1342
|
backupPushChunk: (backupId: text, chunkIndex: nat, data: blob) ->
|
|
1333
1343
|
(Result_1);
|
|
1334
1344
|
/// The OWNER cancels an agent's pending key nomination; the agent keeps its current key. Refused
|
|
@@ -1380,7 +1390,7 @@ type Engram =
|
|
|
1380
1390
|
/// A principal that is already a GUARDIAN cannot become an agent — a guardian is an
|
|
1381
1391
|
/// independent check on agents, so one wallet must not hold both.
|
|
1382
1392
|
createAgentInvite: (name: text, permissions: AgentPermissions) ->
|
|
1383
|
-
(
|
|
1393
|
+
(Result_44);
|
|
1384
1394
|
/// Owner-only: mint an invite for a GUARDIAN — an independent check on agents, not a
|
|
1385
1395
|
/// co-owner and not a recovery agent.
|
|
1386
1396
|
///
|
|
@@ -1403,7 +1413,7 @@ type Engram =
|
|
|
1403
1413
|
/// So an invite that fails to redeem for that reason is not a bad code. The rule exists because
|
|
1404
1414
|
/// a check must be independent of the thing it checks.
|
|
1405
1415
|
createGuardianInvite: (name: text, permissions: GuardianPermissions) ->
|
|
1406
|
-
(
|
|
1416
|
+
(Result_44);
|
|
1407
1417
|
/// OWNER-ONLY deletion of a stored backup.
|
|
1408
1418
|
///
|
|
1409
1419
|
/// ⚠ NOT THE SAME GATE AS THE REST OF THE FAMILY, and the asymmetry is deliberate: `backupInit`,
|
|
@@ -1459,7 +1469,7 @@ type Engram =
|
|
|
1459
1469
|
///
|
|
1460
1470
|
/// ⟨Marker added 2026-08-23; the census row said "L7 mark added per review" and no mark was at
|
|
1461
1471
|
/// the site.⟩
|
|
1462
|
-
ensureEvmReady: () -> (
|
|
1472
|
+
ensureEvmReady: () -> (Result_44);
|
|
1463
1473
|
/// Record that log entries [fromSeq, toSeq] were served, and return the root that proves it.
|
|
1464
1474
|
///
|
|
1465
1475
|
/// This is the receipt ledgerfs Q2 requires before any of those entries may be condensed away.
|
|
@@ -1473,7 +1483,7 @@ type Engram =
|
|
|
1473
1483
|
/// situation rather than a safety measure. It IS gated on requireMemoryAttached: a store that
|
|
1474
1484
|
/// failed its integrity check must not attest anything it cannot vouch for.
|
|
1475
1485
|
exportMemoryRange: (fromSeq: nat, toSeq: nat, authorFilter:
|
|
1476
|
-
opt principal) -> (
|
|
1486
|
+
opt principal) -> (Result_67);
|
|
1477
1487
|
/// ⟨0.16.0, L2.2 — renamed from `guardianFreezePayments`⟩ The prefix LIED about who may call it.
|
|
1478
1488
|
/// The gate is `requireOwnerOrGuardian`, and an owner freezing their own payments is the ordinary
|
|
1479
1489
|
/// case — the guardian is the exceptional one. A name that says otherwise sends an owner looking
|
|
@@ -1505,7 +1515,7 @@ type Engram =
|
|
|
1505
1515
|
/// before this one. If any of them is wrong, this comment is where the argument should happen.
|
|
1506
1516
|
freezePayments: () -> (Result_1);
|
|
1507
1517
|
/// Delivery status + config readback. Owner-only (the URL is a secret).
|
|
1508
|
-
getActionAlertStatus: () -> (
|
|
1518
|
+
getActionAlertStatus: () -> (Result_58) query;
|
|
1509
1519
|
/// Agents need to know what they may revise, so they can read it too. Whole-value config, same
|
|
1510
1520
|
/// carve-out as getProtectedPaths — and kept a SEPARATE method from it deliberately (L2.2): a
|
|
1511
1521
|
/// protected path and a revisable path are opposite grants, and one accessor for both would be a
|
|
@@ -1513,7 +1523,7 @@ type Engram =
|
|
|
1513
1523
|
///
|
|
1514
1524
|
/// Refusal reason preserved from the trap: a grant is a power, and its absence and its
|
|
1515
1525
|
/// concealment are different facts.
|
|
1516
|
-
getAgentRevisablePaths: () -> (
|
|
1526
|
+
getAgentRevisablePaths: () -> (Result_54) query;
|
|
1517
1527
|
/// OWNER-ONLY: every engagement's seat weeks on this engram, with the agent's root — the day it
|
|
1518
1528
|
/// paired, the days of its first and last payment signature, a 64-week map whose bit 0 is the week
|
|
1519
1529
|
/// of the last one, and how many were produced. Never an amount, a recipient or a nonce.
|
|
@@ -1524,7 +1534,7 @@ type Engram =
|
|
|
1524
1534
|
/// order. Anyone else is refused by name (`#Refused getAgentSeatWeeks: …`), never answered with an
|
|
1525
1535
|
/// empty page. Paged; `total` is every engagement ever paired here (a reset keeps the rows).
|
|
1526
1536
|
/// Two rows can name one root: an agent paired again after it left is a second engagement.
|
|
1527
|
-
getAgentSeatWeeks: (start: nat, limit: nat) -> (
|
|
1537
|
+
getAgentSeatWeeks: (start: nat, limit: nat) -> (Result_65) query;
|
|
1528
1538
|
/// Owner: everything written into this engram by someone other than the owner since the last
|
|
1529
1539
|
/// markAgentWritesReviewed() — agent appends/revisions AND paid-session appends (see
|
|
1530
1540
|
/// qualifiesForReview for why those two families are recognised differently).
|
|
@@ -1532,7 +1542,7 @@ type Engram =
|
|
|
1532
1542
|
/// them — the UI must page (markAgentWritesReviewed(?lastShownId)) and must NOT present 200
|
|
1533
1543
|
/// as a total. `earliest` discloses ring eviction — if cursor < earliest, entries between them
|
|
1534
1544
|
/// aged out of the ring (the CHAIN still proves total count; this view can't show their bodies).
|
|
1535
|
-
getAgentWriteReview: () -> (
|
|
1545
|
+
getAgentWriteReview: () -> (Result_64) query;
|
|
1536
1546
|
/// Why anchoring is or is not advancing. PUBLIC: ungated on purpose — detecting a stalled
|
|
1537
1547
|
/// engram is the point, a gated read would fail-to-empty and hand a third party fabricated zeros,
|
|
1538
1548
|
/// and none of these fields is a secret — `total` is already public via getCertifiedAuditHead.
|
|
@@ -1551,7 +1561,7 @@ type Engram =
|
|
|
1551
1561
|
/// below serves the same head WITH the subnet certificate for a caller that needs to verify it
|
|
1552
1562
|
/// was signed rather than asserted.
|
|
1553
1563
|
getAuditHead: () -> (AuditHead) query;
|
|
1554
|
-
getBackupMetadata: (backupId: text) -> (
|
|
1564
|
+
getBackupMetadata: (backupId: text) -> (Result_63) query;
|
|
1555
1565
|
/// The cashier this engram recognises as its rent biller — `null` until the registry pushes one.
|
|
1556
1566
|
///
|
|
1557
1567
|
/// PUBLIC: a payer about to send money needs to know which cashier this engram will accept credit
|
|
@@ -1581,11 +1591,11 @@ type Engram =
|
|
|
1581
1591
|
/// query's state writes are discarded when it returns, and the `denied` call first written here
|
|
1582
1592
|
/// recorded nothing while reading as if it did. The refusal is loud in the reply instead. WHAT
|
|
1583
1593
|
/// WOULD MAKE THIS WRONG: a reason to record who asked — then this becomes an update that says so.
|
|
1584
|
-
getChildAllowance: (agentPrincipal: principal) -> (
|
|
1594
|
+
getChildAllowance: (agentPrincipal: principal) -> (Result_62) query;
|
|
1585
1595
|
/// Owner-only, Billing-class: what opening an engram costs this engram, the balance below which an
|
|
1586
1596
|
/// agent's request is refused, the balance now, and every agent's allowance. The console's cost
|
|
1587
1597
|
/// sentence reads it. Cycles are owner-class information, as on the owner's console read.
|
|
1588
|
-
getChildOpening: () -> (
|
|
1598
|
+
getChildOpening: () -> (Result_61) query;
|
|
1589
1599
|
/// Derive the shared memory-encryption key, encrypted under the caller's transport
|
|
1590
1600
|
/// public key. Gated to owner + read-agents (the same principals allowed to read
|
|
1591
1601
|
/// memory). The client decrypts it locally with its transport secret key.
|
|
@@ -1610,7 +1620,7 @@ type Engram =
|
|
|
1610
1620
|
/// cost. Stated here because L7 requires the reason be readable from the interface rather than
|
|
1611
1621
|
/// inferred by opening the body — which is exactly what had to happen to write this line.
|
|
1612
1622
|
getEncryptedMemoryKey: (epoch: opt nat, transportPublicKey: blob) ->
|
|
1613
|
-
(
|
|
1623
|
+
(Result_60);
|
|
1614
1624
|
/// ⟨0.16.0, owner ruling 2026-08-20 — option (a)⟩ `x402Support` REPORTS THE RAIL, not a constant.
|
|
1615
1625
|
///
|
|
1616
1626
|
/// The card's config hardcodes `x402Support = true`, answering a buyer's question with a fact
|
|
@@ -1709,7 +1719,7 @@ type Engram =
|
|
|
1709
1719
|
/// It refuses rather than half-answers: if either address cannot be derived the reply is
|
|
1710
1720
|
/// `#Err`, never a record carrying an empty string (ic402's `getEvmAddress` answers `""` on a
|
|
1711
1721
|
/// failed derivation — that is fail-to-empty on a money surface, and it stops here).
|
|
1712
|
-
getEvmAddress: () -> (
|
|
1722
|
+
getEvmAddress: () -> (Result_59);
|
|
1713
1723
|
/// The owner's OWN EVM address, if they registered one — distinct from `getEvmAddress`, which is
|
|
1714
1724
|
/// the address this canister derives for itself.
|
|
1715
1725
|
///
|
|
@@ -1724,7 +1734,7 @@ type Engram =
|
|
|
1724
1734
|
/// the management canister's `ecdsa_public_key`. A query cannot await, so the round-trip is the
|
|
1725
1735
|
/// cost — stated here because L7 requires the reason be readable from the interface rather than
|
|
1726
1736
|
/// inferred by opening the body.
|
|
1727
|
-
getEvmSignerAddress: () -> (
|
|
1737
|
+
getEvmSignerAddress: () -> (Result_44);
|
|
1728
1738
|
/// PUBLIC: where this chain begins, for the stranger deciding whether to trust it.
|
|
1729
1739
|
///
|
|
1730
1740
|
/// The fourth of the four evidence methods (`getAuditHead`, `getCertifiedAuditHead`,
|
|
@@ -1733,7 +1743,7 @@ type Engram =
|
|
|
1733
1743
|
/// cannot verify it, and nothing here identifies anybody.
|
|
1734
1744
|
getGenesisNote: () -> (GenesisNote) query;
|
|
1735
1745
|
/// A guardian's own channel status (their URL is their secret — each guardian sees only theirs).
|
|
1736
|
-
getGuardianAlertStatus: () -> (
|
|
1746
|
+
getGuardianAlertStatus: () -> (Result_58) query;
|
|
1737
1747
|
/// The market this engram will accept signing requests from — `null` until the registry pushes
|
|
1738
1748
|
/// one at spawn, which is why `requireMarket` refuses fleet-wide today.
|
|
1739
1749
|
///
|
|
@@ -1763,7 +1773,7 @@ type Engram =
|
|
|
1763
1773
|
/// never renumbered: the next page starts at the last version returned plus one. Defaults
|
|
1764
1774
|
/// return the whole history of any file a pre-FD engram could have held.
|
|
1765
1775
|
getMemoryHistory: (path: text, start: opt nat, max: opt nat) ->
|
|
1766
|
-
(
|
|
1776
|
+
(Result_57) query;
|
|
1767
1777
|
/// PUBLIC: the epoch alone, and deliberately nothing else (rotation study D4). A `rotatedAt[]`
|
|
1768
1778
|
/// history would be a public, fleet-enumerable feed of when each owner terminated a trust
|
|
1769
1779
|
/// relationship — readable by, among others, the party just terminated.
|
|
@@ -1804,7 +1814,7 @@ type Engram =
|
|
|
1804
1814
|
/// Refusal reasons of both merge: an empty policy reads as "nothing is capped, every version kept
|
|
1805
1815
|
/// forever" — a claim about what this engram will DESTROY — and an empty guard list reads as
|
|
1806
1816
|
/// "nothing is held back".
|
|
1807
|
-
getMemoryRetentionPolicy: () -> (
|
|
1817
|
+
getMemoryRetentionPolicy: () -> (Result_56) query;
|
|
1808
1818
|
/// The metrics reader this engram answers — `null` until the spawning registry names one.
|
|
1809
1819
|
///
|
|
1810
1820
|
/// PUBLIC: an owner deciding whether to switch the read off needs to know who it is, and anyone
|
|
@@ -1827,7 +1837,7 @@ type Engram =
|
|
|
1827
1837
|
/// was `nat`, then widened to `opt nat` so a refusal could be `null`, which broke every published
|
|
1828
1838
|
/// client (rule 4) and bought a masked answer nobody had asked for — the census could not even
|
|
1829
1839
|
/// find a consumer that read the masked `0`. Behind a gate there is nobody to mask it from.
|
|
1830
|
-
getOwnerConsole: () -> (
|
|
1840
|
+
getOwnerConsole: () -> (Result_55) query;
|
|
1831
1841
|
/// Owner + agents only (agents need it to avoid writing protected paths).
|
|
1832
1842
|
///
|
|
1833
1843
|
/// A NAMED RECORD, not a Page: the setter replaces this list wholesale, so there is no window to
|
|
@@ -1839,7 +1849,7 @@ type Engram =
|
|
|
1839
1849
|
/// path on this engram is protected", and an agent consults this list precisely to avoid
|
|
1840
1850
|
/// writing one — so a fabricated empty here does not merely misinform, it invites the write the
|
|
1841
1851
|
/// list exists to prevent.
|
|
1842
|
-
getProtectedPaths: () -> (
|
|
1852
|
+
getProtectedPaths: () -> (Result_54) query;
|
|
1843
1853
|
/// Whether the metrics reader's read is answered — `true` from birth.
|
|
1844
1854
|
///
|
|
1845
1855
|
/// PUBLIC: the promise that an owner can switch this read off can be checked only if the switch
|
|
@@ -1848,7 +1858,7 @@ type Engram =
|
|
|
1848
1858
|
/// Owner-only, Billing-class: the signing floor, the balance, one signature's price, and how many
|
|
1849
1859
|
/// payment signatures the balance carries above the floor before `signX402Payment` is refused by
|
|
1850
1860
|
/// name. The same numbers the check uses, so Billing can say only what the engram enforces.
|
|
1851
|
-
getSigningFloor: () -> (
|
|
1861
|
+
getSigningFloor: () -> (Result_53) query;
|
|
1852
1862
|
/// The registry that spawned this engram, if it recorded one.
|
|
1853
1863
|
///
|
|
1854
1864
|
/// PUBLIC: it is the provenance claim. An engram asserting it is part of a fleet, under that
|
|
@@ -1865,7 +1875,7 @@ type Engram =
|
|
|
1865
1875
|
/// configuration, and the engram-wide total would also tell one agent how much the others spent.
|
|
1866
1876
|
/// A refusal names this method (`Gated.gatedResult`) rather than answering null/0 — a ceiling of
|
|
1867
1877
|
/// "none" and a spend of 0 are both real answers, so a fabricated one would be read as fact.
|
|
1868
|
-
getSpendCeiling: () -> (
|
|
1878
|
+
getSpendCeiling: () -> (Result_52) query;
|
|
1869
1879
|
/// Read the caps in force for a caller.
|
|
1870
1880
|
///
|
|
1871
1881
|
/// OWNER-ONLY, and this is where it diverges from the market's inbound twin, which is public.
|
|
@@ -1873,8 +1883,8 @@ type Engram =
|
|
|
1873
1883
|
/// Here the engram serves no 402s at all: these caps are the owner's private custody
|
|
1874
1884
|
/// configuration, and publishing them would tell any caller exactly how large a signing request
|
|
1875
1885
|
/// can be before it needs an approval nobody is watching for.
|
|
1876
|
-
getSpendPolicy: (caller: opt principal) -> (
|
|
1877
|
-
getStorageStats: () -> (
|
|
1886
|
+
getSpendPolicy: (caller: opt principal) -> (Result_51) query;
|
|
1887
|
+
getStorageStats: () -> (Result_50) query;
|
|
1878
1888
|
/// Timer arm-state. PUBLIC and deliberately so: these timers are self-arming to save cycles,
|
|
1879
1889
|
/// and an optimisation nobody can verify is an optimisation nobody should trust. Cheap to read,
|
|
1880
1890
|
/// leaks nothing (booleans about our own scheduling).
|
|
@@ -1898,6 +1908,10 @@ type Engram =
|
|
|
1898
1908
|
/// because a persistent actor re-runs its init body BEFORE postupgrade restores stable sessions,
|
|
1899
1909
|
/// so a predicate-gated arm would skip exactly the canisters that have live ones. The first tick
|
|
1900
1910
|
/// disarms it. Still true minutes after an upgrade is a real bug — report it upstream.
|
|
1911
|
+
/// ⟨2026-10-07, beside the paragraph above⟩ The session sweep's interval is 300 seconds now (the
|
|
1912
|
+
/// owner's decision of that day; set in the actor body), so "one interval" is up to five minutes,
|
|
1913
|
+
/// and true five minutes after an upgrade is still expected. True ten minutes after, with no session
|
|
1914
|
+
/// open, is the bug.
|
|
1901
1915
|
/// NOT the whole timer story. The hourly CYCLE timer — which also carries audit anchoring — is
|
|
1902
1916
|
/// deliberately absent: it is a `transient let` armed unconditionally at init, so an "armed"
|
|
1903
1917
|
/// boolean for it would read true forever and tell you nothing, exactly the false-positive the
|
|
@@ -1941,12 +1955,12 @@ type Engram =
|
|
|
1941
1955
|
/// ⟨L7⟩ MARKER ADDED 2026-08-23, reasoning above UNCHANGED — this block already said "Stays an
|
|
1942
1956
|
/// UPDATE, marked per L7: it awaits three ICRC-1 ledgers". It was marked in prose and invisible
|
|
1943
1957
|
/// to any gate; the glyph is what `scripts/check-update-for-read.mjs` matches.
|
|
1944
|
-
getWalletBalances: () -> (
|
|
1958
|
+
getWalletBalances: () -> (Result_49);
|
|
1945
1959
|
/// Refusal reason preserved, and it is the clearest case of why a masked read is worse than no
|
|
1946
1960
|
/// read: three empty strings with `configured = false` is a VALID-LOOKING answer meaning "this
|
|
1947
1961
|
/// engram has no World ID configuration" — handed to a caller who merely lacks a grant. The
|
|
1948
1962
|
/// fabrication is indistinguishable from the truth by construction.
|
|
1949
|
-
getWorldIdConfig: () -> (
|
|
1963
|
+
getWorldIdConfig: () -> (Result_48) query;
|
|
1950
1964
|
/// ⟨L7⟩ UPDATE, NOT QUERY: this awaits THREE system calls — `raw_rand()` for the nonce,
|
|
1951
1965
|
/// `Call.signWithEcdsa` for the signature, and `worldIdRpPublicKey()` for the derived key. A
|
|
1952
1966
|
/// query can do none of them.
|
|
@@ -1955,7 +1969,7 @@ type Engram =
|
|
|
1955
1969
|
/// Valid iff the derived signer address (getWorldIdRpSignerAddress) is registered for this rp_id in
|
|
1956
1970
|
/// the World Developer Portal. Short-lived (300s TTL, idkit-server's default) and single-purpose —
|
|
1957
1971
|
/// it authorizes opening one verification request, nothing else.
|
|
1958
|
-
getWorldIdRpContext: () -> (
|
|
1972
|
+
getWorldIdRpContext: () -> (Result_47);
|
|
1959
1973
|
/// Owner-only: the EVM address derived from the engram's dedicated World ID RP signing key (the
|
|
1960
1974
|
/// "worldid-rp" tECDSA path). Register THIS address as the rp_id's signer in the World Developer
|
|
1961
1975
|
/// Portal — the engram never holds or exports a private key (only threshold shares exist, on the
|
|
@@ -1965,7 +1979,7 @@ type Engram =
|
|
|
1965
1979
|
/// awaits `worldIdRpPublicKey()` (management `ecdsa_public_key`), and it calls `denied()` on
|
|
1966
1980
|
/// refusal — a state write, which a query cannot perform. So even if the key were cached this
|
|
1967
1981
|
/// could not become a query without silently retiring its denial record (ADR-0002's class).
|
|
1968
|
-
getWorldIdRpSignerAddress: () -> (
|
|
1982
|
+
getWorldIdRpSignerAddress: () -> (Result_44);
|
|
1969
1983
|
/// The verified IDKitResult, verbatim, as World's /api/v4/verify accepted it — the re-checkable
|
|
1970
1984
|
/// artifact behind verifiedHuman. Role-gated because it carries the NULLIFIER.
|
|
1971
1985
|
/// `Result<opt Text>` — and the double wrapper is the entire point, not redundancy.
|
|
@@ -1984,7 +1998,7 @@ type Engram =
|
|
|
1984
1998
|
/// `///`, so the dead name was PUBLISHED in engram.did and pointed every client at a method the
|
|
1985
1999
|
/// canister does not serve. The tombstones below and at `about()` are historical and correct as
|
|
1986
2000
|
/// written; this one was present tense, which is the difference that matters.⟩
|
|
1987
|
-
getWorldIdVerification: () -> (
|
|
2001
|
+
getWorldIdVerification: () -> (Result_46) query;
|
|
1988
2002
|
/// ⟨0.16.0, L1⟩ THE EMERGENCY FAMILY. Every refusal below is `#Refused` or `#NotFound`, and the
|
|
1989
2003
|
/// absence of a `#Conflict` here is the point: these are the calls someone makes while something
|
|
1990
2004
|
/// is going wrong, and the only two answers that help are "you may not do this" and "there is
|
|
@@ -2059,7 +2073,7 @@ type Engram =
|
|
|
2059
2073
|
///
|
|
2060
2074
|
/// Owner-gated because it reports on custody posture, and answered as a Result so that a
|
|
2061
2075
|
/// wrong-identity caller gets a refusal rather than a bare `false` that reads as "no address yet".
|
|
2062
|
-
isEvmAddressCached: () -> (
|
|
2076
|
+
isEvmAddressCached: () -> (Result_45) query;
|
|
2063
2077
|
/// Issue an OAuth authorization code. Called by an OAuth client's sign-in bridge
|
|
2064
2078
|
/// (an `/auth/connector`-style route) after II authentication. The client then
|
|
2065
2079
|
/// redirects the user's browser to `redirectUri` with `?code=<this>` so the
|
|
@@ -2067,7 +2081,7 @@ type Engram =
|
|
|
2067
2081
|
///
|
|
2068
2082
|
/// Owner-only: only the engram owner can authorize a Connector install.
|
|
2069
2083
|
issueAuthCode: (redirectUri: text, scope: text, codeChallenge: text,
|
|
2070
|
-
clientId: opt text) -> (
|
|
2084
|
+
clientId: opt text) -> (Result_44);
|
|
2071
2085
|
/// ⟨0.16.0⟩ `getCycleSnapshotSource` DELETED — folded into `CycleSnapshot.source`, one label per
|
|
2072
2086
|
/// ROW. A single label for a whole ring misattributes every row recorded under the other source,
|
|
2073
2087
|
/// and the source flips by design (self-call first, balance on fallback). Its documentation of
|
|
@@ -2081,7 +2095,7 @@ type Engram =
|
|
|
2081
2095
|
/// Refusal reason preserved, and it is the sharpest of this family: a masked `[]` reads as a
|
|
2082
2096
|
/// DORMANT engram and corrupts retention math — a fabricated empty here does not just misinform a
|
|
2083
2097
|
/// reader, it feeds a wrong number into a decision about destroying data.
|
|
2084
|
-
listActivitySnapshots: (start: nat, limit: nat) -> (
|
|
2098
|
+
listActivitySnapshots: (start: nat, limit: nat) -> (Result_43) query;
|
|
2085
2099
|
/// ⟨0.16.0⟩ THE PAGE EXEMPLAR. Trap → `#Refused`, bare array → `Result<Page<T>>` (L1 + L3).
|
|
2086
2100
|
///
|
|
2087
2101
|
/// The refusal prose that used to be `gatedTrap`'s `whyNotEmpty` argument is not lost — it is why
|
|
@@ -2096,7 +2110,7 @@ type Engram =
|
|
|
2096
2110
|
///
|
|
2097
2111
|
/// `withheld` is 0: this roster is owner-only in whole, so there is no partial-visibility case.
|
|
2098
2112
|
/// A method that filters rows by caller sets it — see L1's row-level honesty rule.
|
|
2099
|
-
listAgents: (start: nat, limit: nat) -> (
|
|
2113
|
+
listAgents: (start: nat, limit: nat) -> (Result_42) query;
|
|
2100
2114
|
/// The GUARDIAN-audience projection of the agent roster — three fields, not the full record.
|
|
2101
2115
|
///
|
|
2102
2116
|
/// Two audiences, two methods (L1/L8), rather than one method masking fields by caller: a
|
|
@@ -2108,7 +2122,7 @@ type Engram =
|
|
|
2108
2122
|
/// Refusal reason preserved: `[]` reads as "this engram has no agents", and this is the list a
|
|
2109
2123
|
/// guardian consults BEFORE REVOKING ONE. A fabricated empty here does not merely misinform —
|
|
2110
2124
|
/// it tells someone acting under emergency powers that there is nothing to act on.
|
|
2111
|
-
listAgentsForGuardian: (start: nat, limit: nat) -> (
|
|
2125
|
+
listAgentsForGuardian: (start: nat, limit: nat) -> (Result_41) query;
|
|
2112
2126
|
/// Owner-only: rows carry caller, amount, operation and free-text rationale. The SDK omits it.
|
|
2113
2127
|
///
|
|
2114
2128
|
/// The optional leading filter SURVIVES the L3 reshape — ratified (census tier-2 #8) rather than
|
|
@@ -2121,7 +2135,7 @@ type Engram =
|
|
|
2121
2135
|
///
|
|
2122
2136
|
/// Refusal reason preserved: `[]` reads as "nothing is awaiting the owner's decision".
|
|
2123
2137
|
listApprovalRequests: (statusFilter: opt ApprovalStatus, start: nat,
|
|
2124
|
-
limit: nat) -> (
|
|
2138
|
+
limit: nat) -> (Result_29) query;
|
|
2125
2139
|
/// ⟨0.16.0⟩ `total` IS THE HEAD COUNTER, and on this method that is the entire point.
|
|
2126
2140
|
///
|
|
2127
2141
|
/// The audit log is a bounded RING: it trims its tail, so "rows you can read" and "entries that
|
|
@@ -2141,7 +2155,7 @@ type Engram =
|
|
|
2141
2155
|
/// For the owner and a guardian `withheld` is 0 and the page is the span. WHAT WOULD MAKE THIS
|
|
2142
2156
|
/// WRONG: a reader who must see the whole record without being the owner or a guardian — the
|
|
2143
2157
|
/// public certified head is the answer for integrity, and nothing else is.
|
|
2144
|
-
listAuditEntries: (start: nat, limit: nat) -> (
|
|
2158
|
+
listAuditEntries: (start: nat, limit: nat) -> (Result_24) query;
|
|
2145
2159
|
/// ⟨0.16.0, L1 + L3 — census-ruled⟩ THE TWO-MECHANISM EXCEPTION DISSOLVES.
|
|
2146
2160
|
///
|
|
2147
2161
|
/// This method used to answer THREE ways to one question: a list, an `#Err` text, and a trap,
|
|
@@ -2165,7 +2179,7 @@ type Engram =
|
|
|
2165
2179
|
/// `dbTypeFilter` DIES on the wire (census). The capability does not: `EngramClient.listBackups`
|
|
2166
2180
|
/// keeps its optional filter and applies it to the page, so no caller loses the ability to ask
|
|
2167
2181
|
/// "backups of this database" — it stops being a thing the canister has to page around.
|
|
2168
|
-
listBackups: (start: nat, limit: nat) -> (
|
|
2182
|
+
listBackups: (start: nat, limit: nat) -> (Result_40) query;
|
|
2169
2183
|
/// List all bearer tokens — Active, Revoked, and Expired. Owner uses this in
|
|
2170
2184
|
/// the dashboard to show installed Connectors (claude.ai, Claude Desktop, etc.).
|
|
2171
2185
|
/// Refusal reason preserved from the trap: `[]` reads as "no connector is installed on this
|
|
@@ -2175,7 +2189,7 @@ type Engram =
|
|
|
2175
2189
|
/// `bearerTokenStore.list()` already resolves each token's status at read time (a token that
|
|
2176
2190
|
/// merely stopped being used is reported `#Expired`, not a stale `#Active`), so the page carries
|
|
2177
2191
|
/// the same honesty the store gained on 2026-08-17.
|
|
2178
|
-
listBearerTokens: (start: nat, limit: nat) -> (
|
|
2192
|
+
listBearerTokens: (start: nat, limit: nat) -> (Result_39) query;
|
|
2179
2193
|
/// The condense checkpoints in the retained log at or above `startSeq`, oldest first.
|
|
2180
2194
|
///
|
|
2181
2195
|
/// ⟨0.16.0, NEW⟩ The other half of the split above. A checkpoint is the only surviving record of a
|
|
@@ -2185,25 +2199,25 @@ type Engram =
|
|
|
2185
2199
|
///
|
|
2186
2200
|
/// Owner-only like every other archive surface, and for the same structural reason: these rows
|
|
2187
2201
|
/// carry the chain positions and roots of entries whose paths were inside the hash preimage.
|
|
2188
|
-
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (
|
|
2202
|
+
listCondenseCheckpoints: (startSeq: nat, max: nat) -> (Result_38) query;
|
|
2189
2203
|
/// ⟨0.16.0⟩ `metrics()` DELETED — absorbed by `about()`.
|
|
2190
2204
|
///
|
|
2191
2205
|
/// Two public projections of one canister (L2.2): `metrics()` and `status()` both answered "what
|
|
2192
2206
|
/// is this engram like" and disagreed on which counters they carried, so a consumer had to fetch
|
|
2193
2207
|
/// both and know which one owned each field. Every field here survives on `about()`, day-flooring
|
|
2194
2208
|
/// included.
|
|
2195
|
-
listCycleSnapshots: (start: nat, limit: nat) -> (
|
|
2209
|
+
listCycleSnapshots: (start: nat, limit: nat) -> (Result_37) query;
|
|
2196
2210
|
/// Same `withheld` treatment as listMemoryFiles — the tombstone listing filtered reserved paths
|
|
2197
2211
|
/// for non-owners just as silently, and a caller could not tell a filtered tombstone list from a
|
|
2198
2212
|
/// complete one. Counted before slicing, so policy-hidden rows never blur into paging.
|
|
2199
|
-
listDeletedMemoryFiles: (start: nat, limit: nat) -> (
|
|
2213
|
+
listDeletedMemoryFiles: (start: nat, limit: nat) -> (Result_36) query;
|
|
2200
2214
|
/// The registered shapes — E3: encodeTypeString is the display artifact, verbatim.
|
|
2201
2215
|
/// Stays on the engram under B1 (hybrid): EIP-712 signing is custody, and custody does not leave.
|
|
2202
2216
|
///
|
|
2203
2217
|
/// Refusal reason preserved: `[]` reads as "this engram can sign nothing" — a claim about SIGNING
|
|
2204
2218
|
/// AUTHORITY, which is not a thing to hand an unauthorized reader. The public trail of every
|
|
2205
2219
|
/// registration remains the audit chain under getCertifiedAuditHead.
|
|
2206
|
-
listEip712Types: (start: nat, limit: nat) -> (
|
|
2220
|
+
listEip712Types: (start: nat, limit: nat) -> (Result_35) query;
|
|
2207
2221
|
/// Stays on the engram under B1 (hybrid): withdrawal custody does not leave.
|
|
2208
2222
|
///
|
|
2209
2223
|
/// NAMED item, not a `(Text, Int)` tuple. The Int is an activation time, and a bare Int beside a
|
|
@@ -2212,14 +2226,14 @@ type Engram =
|
|
|
2212
2226
|
/// Refusal reason preserved, and it has two halves that matter separately: `[]` reads as "this
|
|
2213
2227
|
/// engram may withdraw nowhere", OR — worse — as "no allowlist is in force", which is the
|
|
2214
2228
|
/// opposite security posture. It also erases any pending 24h activation from view.
|
|
2215
|
-
listEvmWithdrawDestinations: (start: nat, limit: nat) -> (
|
|
2229
|
+
listEvmWithdrawDestinations: (start: nat, limit: nat) -> (Result_34) query;
|
|
2216
2230
|
/// Accessible by owner and guardians.
|
|
2217
2231
|
///
|
|
2218
2232
|
/// Refusal reason carried over from the trap, because it is the sharpest example of why this
|
|
2219
2233
|
/// surface may not fail soft: `[]` reads as "this engram has nobody who can freeze payments or
|
|
2220
2234
|
/// pause writes" — a claim about who can STOP it. A caller who cannot tell that from "you may not
|
|
2221
2235
|
/// see the roster" has been told the engram is unguarded when it may be fully guarded.
|
|
2222
|
-
listGuardians: (start: nat, limit: nat) -> (
|
|
2236
|
+
listGuardians: (start: nat, limit: nat) -> (Result_33) query;
|
|
2223
2237
|
/// The export receipts in the retained log at or above `startSeq`, oldest first.
|
|
2224
2238
|
///
|
|
2225
2239
|
/// ⟨0.16.0, L3⟩ ONE LIST, ONE QUESTION. This method used to return receipts AND checkpoints
|
|
@@ -2235,7 +2249,7 @@ type Engram =
|
|
|
2235
2249
|
///
|
|
2236
2250
|
/// Read `MemoryRouter.ReceiptPage` before reading `page.total` as a receipt count. It is not one;
|
|
2237
2251
|
/// it is the chain's length, and the declaration says why.
|
|
2238
|
-
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (
|
|
2252
|
+
listMemoryExportReceipts: (startSeq: nat, max: nat) -> (Result_32) query;
|
|
2239
2253
|
/// ⟨0.16.0⟩ THE `withheld` EXEMPLAR — L1 names this exact method as the defect it fixes.
|
|
2240
2254
|
///
|
|
2241
2255
|
/// A non-owner's answer silently dropped every `config/` and `secrets/` row. Not "refused the
|
|
@@ -2251,7 +2265,7 @@ type Engram =
|
|
|
2251
2265
|
/// Note the count is computed from the unfiltered list before slicing, so it reports rows hidden
|
|
2252
2266
|
/// by POLICY, never rows merely off the end of this page — those are `total`'s job. Conflating
|
|
2253
2267
|
/// the two would rebuild the ambiguity in a new place.
|
|
2254
|
-
listMemoryFiles: (start: nat, limit: nat) -> (
|
|
2268
|
+
listMemoryFiles: (start: nat, limit: nat) -> (Result_31) query;
|
|
2255
2269
|
/// One page of the memory log, seq-ordered, optionally narrowed to one author.
|
|
2256
2270
|
///
|
|
2257
2271
|
/// THE WINDOW IS THE CURSOR, and the page now states it. The window is
|
|
@@ -2277,7 +2291,7 @@ type Engram =
|
|
|
2277
2291
|
/// with the disclosures that make the page verifiable — the hidden-bound defect the census itself
|
|
2278
2292
|
/// names on previewCondense's row.
|
|
2279
2293
|
listMemoryLog: (startSeq: nat, max: nat, authorFilter: opt principal) ->
|
|
2280
|
-
(
|
|
2294
|
+
(Result_30) query;
|
|
2281
2295
|
/// The caller's OWN spend-approval requests. ⟨0.16.0, L1 + L3 — fixed 2026-08-18⟩
|
|
2282
2296
|
///
|
|
2283
2297
|
/// Two defects in seven lines, and the first is the one this release exists to remove:
|
|
@@ -2294,7 +2308,7 @@ type Engram =
|
|
|
2294
2308
|
/// to see, so `total` over their own rows is the honest count and nothing is hidden FROM them.
|
|
2295
2309
|
/// (The unbounded MAP is filed separately — pruning an approval record destroys evidence of what
|
|
2296
2310
|
/// was asked, which is a retention ruling rather than a shape fix.)
|
|
2297
|
-
listMyApprovalRequests: (start: nat, limit: nat) -> (
|
|
2311
|
+
listMyApprovalRequests: (start: nat, limit: nat) -> (Result_29) query;
|
|
2298
2312
|
/// The payer's own sessions, live ones first. PAYER-SCOPED: a caller sees only their own, which
|
|
2299
2313
|
/// is why this needs no role — a session id is not a secret from the person who paid for it.
|
|
2300
2314
|
///
|
|
@@ -2303,7 +2317,7 @@ type Engram =
|
|
|
2303
2317
|
/// It took no arguments, and a cursor added after the freeze is an argument-list change every
|
|
2304
2318
|
/// client would break on — the market paged its own pending withdrawals before its cut for the
|
|
2305
2319
|
/// same reason. The order is the order sessions were opened.
|
|
2306
|
-
listMySessions: (start: nat, limit: nat) -> (
|
|
2320
|
+
listMySessions: (start: nat, limit: nat) -> (Result_28) query;
|
|
2307
2321
|
///
|
|
2308
2322
|
/// ⟨0.16.0, L3⟩ Paged and enveloped like every other `list*`, and the envelope here is uniformity
|
|
2309
2323
|
/// rather than gating: this method cannot refuse anybody, so `#Err` is unreachable on it. That is
|
|
@@ -2316,7 +2330,7 @@ type Engram =
|
|
|
2316
2330
|
/// asked by strangers. `verifyEngramActiveOwner` on the registry answers only about the owner
|
|
2317
2331
|
/// IT recorded, so this chain is what a caller composes with when currency matters — which it
|
|
2318
2332
|
/// cannot do if it needs a role here.
|
|
2319
|
-
listOwnershipTransfers: (start: nat, limit: nat) -> (
|
|
2333
|
+
listOwnershipTransfers: (start: nat, limit: nat) -> (Result_27) query;
|
|
2320
2334
|
/// ⟨2026-09-29, the platform's question from the build review⟩ OWNER-ONLY: how many payment
|
|
2321
2335
|
/// signatures each agent has obtained today, and the daily limit (200, `PaymentSignCap`). The
|
|
2322
2336
|
/// owner's console stated the rule and showed no number, because nothing served one; a number it
|
|
@@ -2332,7 +2346,7 @@ type Engram =
|
|
|
2332
2346
|
/// marketplace's one shared count today is in the reply's `marketplace` field, with the limit this
|
|
2333
2347
|
/// engram enforces for it — beside the agents, never a row among them
|
|
2334
2348
|
/// (`PaymentSignCap.marketplaceRow`). Null when no marketplace is set.
|
|
2335
|
-
listPaymentSignatureCounts: (start: nat, limit: nat) -> (
|
|
2349
|
+
listPaymentSignatureCounts: (start: nat, limit: nat) -> (Result_26) query;
|
|
2336
2350
|
/// Agent records removed by a reset. Each row is a NAMED record with the fields `principal`,
|
|
2337
2351
|
/// `name`, `registeredAt` and `purgedAt` — read them BY NAME, never by position.
|
|
2338
2352
|
/// ⟨2026-09-29, the vocabulary ruling: pairing is the one verb that admits an agent⟩ The field
|
|
@@ -2372,7 +2386,7 @@ type Engram =
|
|
|
2372
2386
|
/// `invite` its enrolment named, and `ended` — why and on what day its engagement ended (its own
|
|
2373
2387
|
/// earlier ending, or the reset) — the facts `resyncAgentEdges` re-sends. The stored rows are
|
|
2374
2388
|
/// served as they are.
|
|
2375
|
-
listPurgedAgents: (start: nat, limit: nat) -> (
|
|
2389
|
+
listPurgedAgents: (start: nat, limit: nat) -> (Result_25) query;
|
|
2376
2390
|
/// ⟨0.16.0⟩ ONE ACCESSOR, folding `readReadLog` and `getDenialLog` — and the fold only became
|
|
2377
2391
|
/// safe because of a change made earlier in this same leg.
|
|
2378
2392
|
///
|
|
@@ -2434,7 +2448,7 @@ type Engram =
|
|
|
2434
2448
|
/// on the chained record — the same `RecordView` filter, and `withheld` counts what it removed
|
|
2435
2449
|
/// together with what `successFilter` removed. WHAT WOULD MAKE THIS WRONG: see `listAuditEntries`.
|
|
2436
2450
|
listReadLog: (successFilter: opt bool, start: nat, limit: nat) ->
|
|
2437
|
-
(
|
|
2451
|
+
(Result_24) query;
|
|
2438
2452
|
/// Same visibility as listAuditEntries: the owner, this engram's agents, and ACTIVE guardians
|
|
2439
2453
|
/// see disputes. An unauthorized read REFUSES — it does not return an empty list, because an
|
|
2440
2454
|
/// empty list reads as "no disputes have been filed", which is a claim, not an absence of one.
|
|
@@ -2449,7 +2463,7 @@ type Engram =
|
|
|
2449
2463
|
/// window — which says disputes exist without showing them, never "none have been filed". WHAT
|
|
2450
2464
|
/// WOULD MAKE THIS WRONG: a ruling that an agent may see the disputes of its own writes; this would
|
|
2451
2465
|
/// then have to look up each disputed version's writer, which it does not do today.
|
|
2452
|
-
listRepudiations: (start: nat, limit: nat) -> (
|
|
2466
|
+
listRepudiations: (start: nat, limit: nat) -> (Result_23) query;
|
|
2453
2467
|
/// Owner: advance the review cursor — "I have seen everything up to and including uptoAuditId"
|
|
2454
2468
|
/// (null = everything at the current head). Bounded so the attestation can never cover entries
|
|
2455
2469
|
/// the console did not render; clamped monotonic (the cursor never moves backward) and to the
|
|
@@ -2494,8 +2508,8 @@ type Engram =
|
|
|
2494
2508
|
///
|
|
2495
2509
|
/// WHAT WOULD MAKE THIS WRONG: an await added between `ChildAllowance.take` and the registry call; the
|
|
2496
2510
|
/// registry's `CHILD_MIN_ATTACHED_CYCLES` moving without `CHILD_ATTACH_CYCLES`.
|
|
2497
|
-
openChildEngram: () -> (
|
|
2498
|
-
openSession: (config: SessionConfig, sig: PaymentSignature) -> (
|
|
2511
|
+
openChildEngram: () -> (Result_22);
|
|
2512
|
+
openSession: (config: SessionConfig, sig: PaymentSignature) -> (Result_21);
|
|
2499
2513
|
/// Withdraw tokens to the owner's principal. This is the ONLY way to
|
|
2500
2514
|
/// move tokens out of the engram to an external address, and the
|
|
2501
2515
|
/// destination is always hardcoded to the owner.
|
|
@@ -2560,7 +2574,7 @@ type Engram =
|
|
|
2560
2574
|
pairAgent: (arg: record {
|
|
2561
2575
|
code: text;
|
|
2562
2576
|
enrolment: Enrolment;
|
|
2563
|
-
}) -> (
|
|
2577
|
+
}) -> (Result_20);
|
|
2564
2578
|
/// ⟨0.16.0, L2.2 — renamed from `guardianPauseWrites`⟩ Same correction as freezePayments above:
|
|
2565
2579
|
/// owner-or-guardian, and `resumeWrites` never carried the prefix either.
|
|
2566
2580
|
pauseWrites: () -> (Result_1);
|
|
@@ -2582,7 +2596,7 @@ type Engram =
|
|
|
2582
2596
|
///
|
|
2583
2597
|
/// `unlocked` is the export-receipt gate ONLY. It is not a promise the condense will land: the
|
|
2584
2598
|
/// history-budget delta is checked at commit time and can still refuse a short prefix.
|
|
2585
|
-
previewCondense: (toSeq: nat) -> (
|
|
2599
|
+
previewCondense: (toSeq: nat) -> (Result_19) query;
|
|
2586
2600
|
/// A quote for a session this caller has not opened and is not committed to — the intent a
|
|
2587
2601
|
/// buyer signs against. Pure dry run, no state, no funds.
|
|
2588
2602
|
///
|
|
@@ -2640,7 +2654,7 @@ type Engram =
|
|
|
2640
2654
|
/// Both are now what they are: a single `#Err` for the whole call. `#Ok` still carries a row per
|
|
2641
2655
|
/// path, each with its own Result — a refused RESERVED path sits beside a readable one, which is
|
|
2642
2656
|
/// a genuine per-path fact.
|
|
2643
|
-
readMemoryBatch: (paths: vec text) -> (
|
|
2657
|
+
readMemoryBatch: (paths: vec text) -> (Result_18) query;
|
|
2644
2658
|
/// ⟨0.16.0⟩ `getMemoryRetentionGuards` DELETED — folded into `getMemoryRetentionPolicy` above.
|
|
2645
2659
|
/// It was the second L2.1 array-returning `get*`, and separating it from the policy it modifies
|
|
2646
2660
|
/// was the defect described there. Its own docs are preserved at the fold site.
|
|
@@ -2651,7 +2665,7 @@ type Engram =
|
|
|
2651
2665
|
/// see it cannot know whether it has the whole range, which is how silent truncation gets
|
|
2652
2666
|
/// reintroduced. Loop while `more` is true, advancing by the bytes actually returned.
|
|
2653
2667
|
readMemoryBytes: (path: text, offset: nat, len: nat, version: opt nat) ->
|
|
2654
|
-
(
|
|
2668
|
+
(Result_17) query;
|
|
2655
2669
|
/// The escrow exit for a session whose settle cannot pay.
|
|
2656
2670
|
///
|
|
2657
2671
|
/// PAYER-ONLY, enforced inside the gateway, and deliberately not owner-triggered: the payer's own
|
|
@@ -2706,7 +2720,15 @@ type Engram =
|
|
|
2706
2720
|
/// the transfer pays its own fee from the escrow. A session still reads `closing` only when its
|
|
2707
2721
|
/// close trapped after one of its awaits, or an earlier version left it there, and of that one the
|
|
2708
2722
|
/// line above still holds.
|
|
2709
|
-
|
|
2723
|
+
///
|
|
2724
|
+
/// ⟨2026-10-07, the owner's decision of that day⟩ WHAT IT ANSWERS: what came back. `amountE6` is
|
|
2725
|
+
/// the ckUSDC base units transferred to the payer's own account (the amount asked, capped at the
|
|
2726
|
+
/// session's unconsumed deposit; the transfer's fee comes out of the escrow on top), and
|
|
2727
|
+
/// `blockIndex` is the ledger block of that transfer. Until this date it answered a bare `nat` that
|
|
2728
|
+
/// was the block index alone, which read as the amount. If the session's record is removed before
|
|
2729
|
+
/// the amount can be read back — a session closed in the same moment as the recovery and cleaned up
|
|
2730
|
+
/// during its transfer — it answers `#Other` naming the block, never a guessed amount.
|
|
2731
|
+
recoverEscrow: (sessionId: text, amountE6: nat) -> (Result_16);
|
|
2710
2732
|
/// ⟨0.16.0, L1⟩ A REDEMPTION PATH, where the arm choice is a disclosure decision.
|
|
2711
2733
|
///
|
|
2712
2734
|
/// Four of these refusals are about the CODE and one is about the caller. The code arms restate
|