footprintjs 9.45.0 → 9.46.0

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.
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Like a runtime heap with namespace isolation:
5
5
  * - A value is written at an ADDRESS — a path prefix the caller computed
6
- * (C2: the engine's frame decides it, `StageContext · address`) — and read
6
+ * (C2: the engine's frame decides it, `StageContext.ts · runAddress`) — and read
7
7
  * there first, then at the root
8
8
  * - Default values seed the root, and the container at an address when a
9
9
  * write creates it
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Like a runtime heap with namespace isolation:
5
5
  * - A value is written at an ADDRESS — a path prefix the caller computed
6
- * (C2: the engine's frame decides it, `StageContext · address`) — and read
6
+ * (C2: the engine's frame decides it, `StageContext.ts · runAddress`) — and read
7
7
  * there first, then at the root
8
8
  * - Default values seed the root, and the container at an address when a
9
9
  * write creates it
@@ -79,4 +79,4 @@ export class SharedMemory {
79
79
  this.context = nextGeneration(this.context, updates, overwrite, trace);
80
80
  }
81
81
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU2hhcmVkTWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJILE1BQU0sT0FBTyxZQUFZO0lBQ2YsT0FBTyxHQUEyQixFQUFFLENBQUM7SUFDckMsY0FBYyxDQUFXO0lBRWpDLFlBQVksYUFBdUIsRUFBRSxjQUF3QjtRQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0UsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRixDQUFDO0lBRUQsMkdBQTJHO0lBQzNHLFdBQVcsQ0FBQyxPQUEwQixFQUFFLElBQWMsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUNqRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsUUFBUSxDQUFDLE9BQTBCLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxPQUEyQixFQUFFLElBQWUsRUFBRSxHQUFZO1FBQ2pFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDL0UsT0FBTyxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxzR0FBc0c7SUFDdEcsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsa0dBQWtHO0lBQ2xHLFVBQVUsQ0FBQyxTQUFzQixFQUFFLE9BQW9CLEVBQUUsS0FBbUI7UUFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkTWVtb3J5IOKAlCBUaGUgc2hhcmVkIHN0YXRlIGNvbnRhaW5lciBmb3IgYWxsIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGEgcnVudGltZSBoZWFwIHdpdGggbmFtZXNwYWNlIGlzb2xhdGlvbjpcbiAqIC0gQSB2YWx1ZSBpcyB3cml0dGVuIGF0IGFuIEFERFJFU1Mg4oCUIGEgcGF0aCBwcmVmaXggdGhlIGNhbGxlciBjb21wdXRlZFxuICogICAoQzI6IHRoZSBlbmdpbmUncyBmcmFtZSBkZWNpZGVzIGl0LCBgU3RhZ2VDb250ZXh0IMK3IGFkZHJlc3NgKSDigJQgYW5kIHJlYWRcbiAqICAgdGhlcmUgZmlyc3QsIHRoZW4gYXQgdGhlIHJvb3RcbiAqIC0gRGVmYXVsdCB2YWx1ZXMgc2VlZCB0aGUgcm9vdCwgYW5kIHRoZSBjb250YWluZXIgYXQgYW4gYWRkcmVzcyB3aGVuIGFcbiAqICAgd3JpdGUgY3JlYXRlcyBpdFxuICogLSBBY2NlcHRzIGNvbW1pdCBidW5kbGVzIGZyb20gVHJhbnNhY3Rpb25CdWZmZXJcbiAqXG4gKiBDT1BZLU9OLVdSSVRFICg5LjI5LjAg4oCUIGRvY3MvZGVzaWduLzIwMjYtMTAtY29weS1vbi13cml0ZS1jb21taXQubWQpOlxuICogYGNvbnRleHRgIGlzIGEgR0VORVJBVElPTiwgYW5kIGEgZ2VuZXJhdGlvbiBpcyBuZXZlciBlZGl0ZWQuIEV2ZXJ5IHdyaXRlIOKAlFxuICogYGFwcGx5UGF0Y2hgIChhIHN0YWdlIGNvbW1pdCksIGBzZXRWYWx1ZWAsIGB1cGRhdGVWYWx1ZWAg4oCUIGJ1aWxkcyB0aGUgbmV4dFxuICogZ2VuZXJhdGlvbiBieSBjb3B5aW5nIHRoZSByb290IGFuZCB0aGUgY29udGFpbmVycyBvbiBlYWNoIHdyaXR0ZW4gcGF0aCxcbiAqIHNoYXJlcyBldmVyeSBvdGhlciBzdWJ0cmVlIHdpdGggdGhlIGdlbmVyYXRpb24gYmVmb3JlIGl0LCBhbmQgc3dhcHMuIFNvIGFcbiAqIGdlbmVyYXRpb24gYSBzdGFnZSBjYXB0dXJlZCAoaXRzIGZpcnN0LXRvdWNoIHZpZXcsIGl0cyB0cmFuc2FjdGlvblxuICogYnVmZmVyJ3MgZGlmZiBiYXNlKSBzdGF5cyBleGFjdGx5IHdoYXQgaXQgd2FzLCBhbmQgYSB3cml0ZSBjb3N0cyBPKHdoYXQgaXRcbiAqIHdyb3RlKSwgbm90IE8oc3RhdGUpLlxuICovXG5cbmltcG9ydCB7IG1lcmdlQ29udGV4dFdpbnMsIG93bmVkUm9vdE9mLCBvd25TcGluZSB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZXROZXN0ZWRWYWx1ZSwgZ2V0UnVuQW5kR2xvYmFsUGF0aHMsIG5leHRHZW5lcmF0aW9uLCBzZXROZXN0ZWRWYWx1ZSwgdXBkYXRlTmVzdGVkVmFsdWUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIFNoYXJlZE1lbW9yeSB7XG4gIHByaXZhdGUgY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzPzogdW5rbm93bjtcblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWVzPzogdW5rbm93biwgaW5pdGlhbENvbnRleHQ/OiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRWYWx1ZXM7XG4gICAgY29uc3Qgc2VlZCA9IG1lcmdlQ29udGV4dFdpbnMoaW5pdGlhbENvbnRleHQgfHwge30sIGRlZmF1bHRWYWx1ZXMgfHwge30pO1xuICAgIC8vIERldGFjaGVkIE9OQ0UsIGhlcmU6IGBtZXJnZUNvbnRleHRXaW5zYCBjb3BpZXMgb25seSB0aGUgdG9wIGxldmVsLCBzb1xuICAgIC8vIHRoZSBzZWVkJ3MgbmVzdGVkIHZhbHVlcyBhcmUgdGhlIGNhbGxlcidzIG93biBvYmplY3RzLiBCZWZvcmUgOS4yOS4wXG4gICAgLy8gdGhlIGZpcnN0IGNvbW1pdCdzIHdob2xlLXN0YXRlIGNsb25lIGRldGFjaGVkIHRoZW0gKGFuZCB1bnRpbCB0aGVuIGFcbiAgICAvLyBjYWxsZXIgbXV0YXRpbmcgaXRzIGBpbml0aWFsQ29udGV4dGAgY2hhbmdlZCBsaXZlIHN0YXRlIHdpdGggbm8gcm93KTtcbiAgICAvLyBub3RoaW5nIHJlLWNsb25lcyB0aGUgc3RhdGUgYW55IG1vcmUsIHNvIHRoZSBzZWVkIGlzIGRldGFjaGVkIGF0XG4gICAgLy8gY29uc3RydWN0aW9uIOKAlCBvbmUgY2xvbmUgcGVyIHJ1bnRpbWUsIG5vdCBvbmUgcGVyIGNvbW1pdC5cbiAgICB0aGlzLmNvbnRleHQgPSBPYmplY3Qua2V5cyhzZWVkKS5sZW5ndGggPiAwID8gc3RydWN0dXJlZENsb25lKHNlZWQpIDogc2VlZDtcbiAgfVxuXG4gIC8qKiBHZXRzIGEgY2xvbmUgb2YgdGhlIGRlZmF1bHQgdmFsdWVzLiAqL1xuICBnZXREZWZhdWx0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWVzID8gc3RydWN0dXJlZENsb25lKHRoaXMuX2RlZmF1bHRWYWx1ZXMpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgYSB2YWx1ZSBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgdXNpbmcgbWVyZ2Ugc2VtYW50aWNzLCBhcyBhIG5ldyBnZW5lcmF0aW9uIChwYXRoIGNvcHkgKyBzd2FwKS4gKi9cbiAgdXBkYXRlVmFsdWUoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vd25lZFBhdGhUbyhhZGRyZXNzLCBwYXRoLCBrZXkpO1xuICAgIHVwZGF0ZU5lc3RlZFZhbHVlKG5leHQsIGFkZHJlc3MsIHBhdGgsIGtleSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcygpKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0O1xuICB9XG5cbiAgLyoqIFNldHMgYSB2YWx1ZSBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgdXNpbmcgb3ZlcndyaXRlIHNlbWFudGljcywgYXMgYSBuZXcgZ2VuZXJhdGlvbiAocGF0aCBjb3B5ICsgc3dhcCkuICovXG4gIHNldFZhbHVlKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMub3duZWRQYXRoVG8oYWRkcmVzcywgcGF0aCwga2V5KTtcbiAgICBzZXROZXN0ZWRWYWx1ZShuZXh0LCBhZGRyZXNzLCBwYXRoLCBrZXksIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZXMoKSk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvcHkgb2YgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbidzIHJvb3Qgd2hvc2UgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvXG4gICAqIGBrZXlgIGFyZSBvd25lZCDigJQgdGhlIGluLXBsYWNlIGhlbHBlcnMgYWJvdmUgdGhlbiBlZGl0IG9ubHkgY29waWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBvd25lZFBhdGhUbyhhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSwgcGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgY29uc3Qgcm9vdCA9IG93bmVkUm9vdE9mKHRoaXMuY29udGV4dCwgb3duZWQpO1xuICAgIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMoYWRkcmVzcywgcGF0aCk7XG4gICAgb3duU3BpbmUocm9vdCwgWy4uLihydW5QYXRoIHx8IGdsb2JhbFBhdGgpLCBrZXldLCBvd25lZCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYSB2YWx1ZSBmcm9tIHRoZSBzdG9yZS5cbiAgICogTG9va3MgdXAgYXQgYGFkZHJlc3NgIGZpcnN0LCBmYWxscyBiYWNrIHRvIHRoZSByb290LlxuICAgKi9cbiAgZ2V0VmFsdWUoYWRkcmVzcz86IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgeyBnbG9iYWxQYXRoLCBydW5QYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzLCBwYXRoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHJ1blBhdGggPyBnZXROZXN0ZWRWYWx1ZSh0aGlzLmNvbnRleHQsIHJ1blBhdGgsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyB2YWx1ZSA6IGdldE5lc3RlZFZhbHVlKHRoaXMuY29udGV4dCwgZ2xvYmFsUGF0aCwga2V5KTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBlbnRpcmUgc3RhdGUgYXMgYSBKU09OIG9iamVjdCDigJQgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgYnkgcmVmZXJlbmNlLiBOZXZlciBtdXRhdGUgaXQuICovXG4gIGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgLyoqIEFwcGxpZXMgYSBjb21taXQgYnVuZGxlIGZyb20gVHJhbnNhY3Rpb25CdWZmZXI6IGJ1aWxkcyB0aGUgbmV4dCBnZW5lcmF0aW9uIGFuZCBzd2FwcyBpdCBpbi4gKi9cbiAgYXBwbHlQYXRjaChvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB1cGRhdGVzOiBNZW1vcnlQYXRjaCwgdHJhY2U6IFRyYWNlRW50cnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dCA9IG5leHRHZW5lcmF0aW9uKHRoaXMuY29udGV4dCwgdXBkYXRlcywgb3ZlcndyaXRlLCB0cmFjZSk7XG4gIH1cbn1cbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU2hhcmVkTWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJILE1BQU0sT0FBTyxZQUFZO0lBQ2YsT0FBTyxHQUEyQixFQUFFLENBQUM7SUFDckMsY0FBYyxDQUFXO0lBRWpDLFlBQVksYUFBdUIsRUFBRSxjQUF3QjtRQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0UsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRixDQUFDO0lBRUQsMkdBQTJHO0lBQzNHLFdBQVcsQ0FBQyxPQUEwQixFQUFFLElBQWMsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUNqRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsUUFBUSxDQUFDLE9BQTBCLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxPQUEyQixFQUFFLElBQWUsRUFBRSxHQUFZO1FBQ2pFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDL0UsT0FBTyxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxzR0FBc0c7SUFDdEcsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsa0dBQWtHO0lBQ2xHLFVBQVUsQ0FBQyxTQUFzQixFQUFFLE9BQW9CLEVBQUUsS0FBbUI7UUFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkTWVtb3J5IOKAlCBUaGUgc2hhcmVkIHN0YXRlIGNvbnRhaW5lciBmb3IgYWxsIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGEgcnVudGltZSBoZWFwIHdpdGggbmFtZXNwYWNlIGlzb2xhdGlvbjpcbiAqIC0gQSB2YWx1ZSBpcyB3cml0dGVuIGF0IGFuIEFERFJFU1Mg4oCUIGEgcGF0aCBwcmVmaXggdGhlIGNhbGxlciBjb21wdXRlZFxuICogICAoQzI6IHRoZSBlbmdpbmUncyBmcmFtZSBkZWNpZGVzIGl0LCBgU3RhZ2VDb250ZXh0LnRzIMK3IHJ1bkFkZHJlc3NgKSDigJQgYW5kIHJlYWRcbiAqICAgdGhlcmUgZmlyc3QsIHRoZW4gYXQgdGhlIHJvb3RcbiAqIC0gRGVmYXVsdCB2YWx1ZXMgc2VlZCB0aGUgcm9vdCwgYW5kIHRoZSBjb250YWluZXIgYXQgYW4gYWRkcmVzcyB3aGVuIGFcbiAqICAgd3JpdGUgY3JlYXRlcyBpdFxuICogLSBBY2NlcHRzIGNvbW1pdCBidW5kbGVzIGZyb20gVHJhbnNhY3Rpb25CdWZmZXJcbiAqXG4gKiBDT1BZLU9OLVdSSVRFICg5LjI5LjAg4oCUIGRvY3MvZGVzaWduLzIwMjYtMTAtY29weS1vbi13cml0ZS1jb21taXQubWQpOlxuICogYGNvbnRleHRgIGlzIGEgR0VORVJBVElPTiwgYW5kIGEgZ2VuZXJhdGlvbiBpcyBuZXZlciBlZGl0ZWQuIEV2ZXJ5IHdyaXRlIOKAlFxuICogYGFwcGx5UGF0Y2hgIChhIHN0YWdlIGNvbW1pdCksIGBzZXRWYWx1ZWAsIGB1cGRhdGVWYWx1ZWAg4oCUIGJ1aWxkcyB0aGUgbmV4dFxuICogZ2VuZXJhdGlvbiBieSBjb3B5aW5nIHRoZSByb290IGFuZCB0aGUgY29udGFpbmVycyBvbiBlYWNoIHdyaXR0ZW4gcGF0aCxcbiAqIHNoYXJlcyBldmVyeSBvdGhlciBzdWJ0cmVlIHdpdGggdGhlIGdlbmVyYXRpb24gYmVmb3JlIGl0LCBhbmQgc3dhcHMuIFNvIGFcbiAqIGdlbmVyYXRpb24gYSBzdGFnZSBjYXB0dXJlZCAoaXRzIGZpcnN0LXRvdWNoIHZpZXcsIGl0cyB0cmFuc2FjdGlvblxuICogYnVmZmVyJ3MgZGlmZiBiYXNlKSBzdGF5cyBleGFjdGx5IHdoYXQgaXQgd2FzLCBhbmQgYSB3cml0ZSBjb3N0cyBPKHdoYXQgaXRcbiAqIHdyb3RlKSwgbm90IE8oc3RhdGUpLlxuICovXG5cbmltcG9ydCB7IG1lcmdlQ29udGV4dFdpbnMsIG93bmVkUm9vdE9mLCBvd25TcGluZSB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZXROZXN0ZWRWYWx1ZSwgZ2V0UnVuQW5kR2xvYmFsUGF0aHMsIG5leHRHZW5lcmF0aW9uLCBzZXROZXN0ZWRWYWx1ZSwgdXBkYXRlTmVzdGVkVmFsdWUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIFNoYXJlZE1lbW9yeSB7XG4gIHByaXZhdGUgY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzPzogdW5rbm93bjtcblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWVzPzogdW5rbm93biwgaW5pdGlhbENvbnRleHQ/OiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRWYWx1ZXM7XG4gICAgY29uc3Qgc2VlZCA9IG1lcmdlQ29udGV4dFdpbnMoaW5pdGlhbENvbnRleHQgfHwge30sIGRlZmF1bHRWYWx1ZXMgfHwge30pO1xuICAgIC8vIERldGFjaGVkIE9OQ0UsIGhlcmU6IGBtZXJnZUNvbnRleHRXaW5zYCBjb3BpZXMgb25seSB0aGUgdG9wIGxldmVsLCBzb1xuICAgIC8vIHRoZSBzZWVkJ3MgbmVzdGVkIHZhbHVlcyBhcmUgdGhlIGNhbGxlcidzIG93biBvYmplY3RzLiBCZWZvcmUgOS4yOS4wXG4gICAgLy8gdGhlIGZpcnN0IGNvbW1pdCdzIHdob2xlLXN0YXRlIGNsb25lIGRldGFjaGVkIHRoZW0gKGFuZCB1bnRpbCB0aGVuIGFcbiAgICAvLyBjYWxsZXIgbXV0YXRpbmcgaXRzIGBpbml0aWFsQ29udGV4dGAgY2hhbmdlZCBsaXZlIHN0YXRlIHdpdGggbm8gcm93KTtcbiAgICAvLyBub3RoaW5nIHJlLWNsb25lcyB0aGUgc3RhdGUgYW55IG1vcmUsIHNvIHRoZSBzZWVkIGlzIGRldGFjaGVkIGF0XG4gICAgLy8gY29uc3RydWN0aW9uIOKAlCBvbmUgY2xvbmUgcGVyIHJ1bnRpbWUsIG5vdCBvbmUgcGVyIGNvbW1pdC5cbiAgICB0aGlzLmNvbnRleHQgPSBPYmplY3Qua2V5cyhzZWVkKS5sZW5ndGggPiAwID8gc3RydWN0dXJlZENsb25lKHNlZWQpIDogc2VlZDtcbiAgfVxuXG4gIC8qKiBHZXRzIGEgY2xvbmUgb2YgdGhlIGRlZmF1bHQgdmFsdWVzLiAqL1xuICBnZXREZWZhdWx0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWVzID8gc3RydWN0dXJlZENsb25lKHRoaXMuX2RlZmF1bHRWYWx1ZXMpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgYSB2YWx1ZSBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgdXNpbmcgbWVyZ2Ugc2VtYW50aWNzLCBhcyBhIG5ldyBnZW5lcmF0aW9uIChwYXRoIGNvcHkgKyBzd2FwKS4gKi9cbiAgdXBkYXRlVmFsdWUoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vd25lZFBhdGhUbyhhZGRyZXNzLCBwYXRoLCBrZXkpO1xuICAgIHVwZGF0ZU5lc3RlZFZhbHVlKG5leHQsIGFkZHJlc3MsIHBhdGgsIGtleSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcygpKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0O1xuICB9XG5cbiAgLyoqIFNldHMgYSB2YWx1ZSBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgdXNpbmcgb3ZlcndyaXRlIHNlbWFudGljcywgYXMgYSBuZXcgZ2VuZXJhdGlvbiAocGF0aCBjb3B5ICsgc3dhcCkuICovXG4gIHNldFZhbHVlKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMub3duZWRQYXRoVG8oYWRkcmVzcywgcGF0aCwga2V5KTtcbiAgICBzZXROZXN0ZWRWYWx1ZShuZXh0LCBhZGRyZXNzLCBwYXRoLCBrZXksIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZXMoKSk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvcHkgb2YgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbidzIHJvb3Qgd2hvc2UgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvXG4gICAqIGBrZXlgIGFyZSBvd25lZCDigJQgdGhlIGluLXBsYWNlIGhlbHBlcnMgYWJvdmUgdGhlbiBlZGl0IG9ubHkgY29waWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBvd25lZFBhdGhUbyhhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSwgcGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgY29uc3Qgcm9vdCA9IG93bmVkUm9vdE9mKHRoaXMuY29udGV4dCwgb3duZWQpO1xuICAgIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMoYWRkcmVzcywgcGF0aCk7XG4gICAgb3duU3BpbmUocm9vdCwgWy4uLihydW5QYXRoIHx8IGdsb2JhbFBhdGgpLCBrZXldLCBvd25lZCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYSB2YWx1ZSBmcm9tIHRoZSBzdG9yZS5cbiAgICogTG9va3MgdXAgYXQgYGFkZHJlc3NgIGZpcnN0LCBmYWxscyBiYWNrIHRvIHRoZSByb290LlxuICAgKi9cbiAgZ2V0VmFsdWUoYWRkcmVzcz86IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgeyBnbG9iYWxQYXRoLCBydW5QYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzLCBwYXRoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHJ1blBhdGggPyBnZXROZXN0ZWRWYWx1ZSh0aGlzLmNvbnRleHQsIHJ1blBhdGgsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyB2YWx1ZSA6IGdldE5lc3RlZFZhbHVlKHRoaXMuY29udGV4dCwgZ2xvYmFsUGF0aCwga2V5KTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBlbnRpcmUgc3RhdGUgYXMgYSBKU09OIG9iamVjdCDigJQgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgYnkgcmVmZXJlbmNlLiBOZXZlciBtdXRhdGUgaXQuICovXG4gIGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgLyoqIEFwcGxpZXMgYSBjb21taXQgYnVuZGxlIGZyb20gVHJhbnNhY3Rpb25CdWZmZXI6IGJ1aWxkcyB0aGUgbmV4dCBnZW5lcmF0aW9uIGFuZCBzd2FwcyBpdCBpbi4gKi9cbiAgYXBwbHlQYXRjaChvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB1cGRhdGVzOiBNZW1vcnlQYXRjaCwgdHJhY2U6IFRyYWNlRW50cnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dCA9IG5leHRHZW5lcmF0aW9uKHRoaXMuY29udGV4dCwgdXBkYXRlcywgb3ZlcndyaXRlLCB0cmFjZSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,35 +2,33 @@
2
2
  * StageContext — Execution context for a single stage in a flowchart run
3
3
  *
4
4
  * Like a stack frame in a compiler/runtime:
5
- * - Reference to SharedMemory (accessing heap memory)
6
- * - TransactionBuffer for staging mutations (transaction buffer)
5
+ * - A RecordFrame — the record half (C3): the heap, the address, the
6
+ * first-touch base, the lazy transaction buffer, the readKeys list
7
7
  * - Links to parent/child/next contexts (call stack frames)
8
+ * - What belongs to a stage inside a run: retention of reads and writes, the
9
+ * redaction verdict per write, the dev-mode warnings, the commit observer
8
10
  * - DiagnosticCollector for logs, errors, metrics
9
11
  */
10
12
  import { type DiagnosticChannel, DiagnosticCollector } from './DiagnosticCollector.js';
11
- import { EventLog } from './EventLog.js';
13
+ import type { EventLog } from './EventLog.js';
12
14
  import type { EmitSourcePosition } from './eventPosition.js';
13
15
  import type { RedactionVerdict } from './redaction.js';
14
16
  import { RedactionRule } from './redaction.js';
15
17
  import type { RunPolicy } from './runPolicy.js';
16
- import { SharedMemory } from './SharedMemory.js';
17
- import { TransactionBuffer } from './TransactionBuffer.js';
18
+ import type { SharedMemory } from './SharedMemory.js';
18
19
  import type { CommitPhase, FlowControlType, StageSnapshot, UntrackedSource } from './types.js';
19
20
  export declare class StageContext {
20
- private sharedMemory;
21
21
  /**
22
- * Parallel redacted mirror of `sharedMemory`. Populated in `commit()` with
23
- * the already-computed redacted patches (the same ones fed to `eventLog`).
24
- * Present **only** when the executor has been told to maintain a redacted
25
- * view — i.e. when a `RedactionPolicy` is configured. Otherwise undefined,
26
- * zero extra work per commit.
27
- *
28
- * The mirror is read via `FlowChartExecutor.getSnapshot({ redact: true })`
29
- * and is the foundation for the "export trace" / paste-into-viewer feature
30
- * — consumers share the redacted view externally without leaking raw PII
31
- * through `sharedState`.
22
+ * The record half of this frame (`RecordFrame.ts`, L3, C3): the heap and,
23
+ * when the run keeps them, the redacted mirror and the log; the address;
24
+ * the first-touch base; the lazy transaction buffer; the readKeys list.
25
+ * Every state read of this frame goes through it, and so does every
26
+ * commit. The mirror is present **only** when the run's policy keeps a
27
+ * redacted view (a `RedactionPolicy` is configured) — read via
28
+ * `FlowChartExecutor.getSnapshot({ redact: true })`, the foundation for
29
+ * sharing a trace without leaking raw PII through `sharedState`.
32
30
  */
33
- private redactedSharedMemory?;
31
+ private readonly record;
34
32
  /**
35
33
  * The run's policy — the four dials, the redaction rule, the mirror flag
36
34
  * (`runPolicy.ts`, F5). Held BY REFERENCE: one frozen object per run (and
@@ -40,15 +38,6 @@ export declare class StageContext {
40
38
  * ({@link usePolicy}). Never edited; a change is a new object.
41
39
  */
42
40
  private policy;
43
- private buffer?;
44
- /**
45
- * Committed-state view captured at this stage's FIRST touch (first read OR
46
- * first write) — held by REFERENCE, never cloned. See
47
- * {@link firstTouchState} for the algorithm and the immutability invariant
48
- * that makes a bare reference safe.
49
- */
50
- private stateView?;
51
- private eventLog?;
52
41
  /** The emitting frame's logical leg, never the mutable executor's current leg. */
53
42
  private emitRunId?;
54
43
  stageName: string;
@@ -65,7 +54,13 @@ export declare class StageContext {
65
54
  * none — the same once-per-execution law `_untrackedSources` keeps.
66
55
  */
67
56
  tags?: readonly string[];
68
- runId: string;
57
+ /**
58
+ * The run this frame belongs to — its identity on every event, and the run
59
+ * namespace it reads and writes in ({@link runAddress}), read once, when the
60
+ * frame is built (C3). Only {@link useAddressOf} moves the address after
61
+ * that, and only before the first write.
62
+ */
63
+ readonly runId: string;
69
64
  /**
70
65
  * The run namespace this frame writes and reads in when that is not its own
71
66
  * `runId` — set once, before the frame's first write, by
@@ -128,11 +123,6 @@ export declare class StageContext {
128
123
  * tier (`ScopeFacade`, one per stage execution), not here.
129
124
  */
130
125
  private _committed;
131
- /** Lazily-allocated ordered registry of keys tracked-read in THIS stage —
132
- * the source of the per-write prefix. Only allocated under the
133
- * `'reads-prefix'` dial; insertion-ordered (a Set) and monotonic, which
134
- * is what makes "last write's prefix == union" hold in delta mode. */
135
- private _provenanceReads?;
136
126
  /** Tracked reads of a selected value ({@link selectedReads}). */
137
127
  private _selectedReads;
138
128
  /** Each object this frame read under a selected name → that read's verdict (`stageWrite` hands it on). */
@@ -159,7 +149,7 @@ export declare class StageContext {
159
149
  /**
160
150
  * Install a parallel redacted mirror. Subsequent `commit()` calls apply
161
151
  * the already-computed redacted patches — the ones the log records — to
162
- * this mirror, beside the raw patches on `sharedMemory` (`recordCommit`).
152
+ * this mirror, beside the raw patches on the heap (`recordCommit`).
163
153
  * Child / next contexts inherit the mirror via `createNext` / `createChild`.
164
154
  *
165
155
  * Called on a runtime's root frame by `ExecutionRuntime` when the run's policy keeps a mirror.
@@ -198,6 +188,12 @@ export declare class StageContext {
198
188
  * {@link createChild} both call it, and it names no dial.
199
189
  */
200
190
  private inheritRun;
191
+ /**
192
+ * The ONE place this frame's policy changes: the frame holds it, and its
193
+ * record frame encodes under the same reference (`commitValues`,
194
+ * `writeProvenance` — `RecordFrame · useEncoding`), so the two never differ.
195
+ */
196
+ private adoptPolicy;
201
197
  /**
202
198
  * Record a tracked user-level write, policy-gated (#13c-A) — the single
203
199
  * bookkeeping path for {@link setObject} and {@link updateObject}. Holds
@@ -257,70 +253,6 @@ export declare class StageContext {
257
253
  * the verdict so the caller retains and reports under the same decision.
258
254
  */
259
255
  private stageWrite;
260
- /**
261
- * ── The first-touch state view (#13) ────────────────────────────────────
262
- *
263
- * WHAT: returns the committed shared state as it was at this stage's FIRST
264
- * touch (first read or first write), capturing the reference on first call.
265
- * Serves two consumers: reads before the first write ({@link readState})
266
- * and the transaction buffer's diff base ({@link getTransactionBuffer}).
267
- *
268
- * WHY A BARE REFERENCE IS SAFE — the invariant this rests on: committed
269
- * state is immutable-after-swap. Every write to `SharedMemory` builds the
270
- * NEXT generation and swaps it in (copy-on-write, 9.29.0: `applyPatch` via
271
- * `nextGeneration`, and `setValue`/`updateValue` too) — it copies the root
272
- * and the containers on each written path, shares the rest, and never
273
- * edits a container of the generation a stage captured here. Holding the
274
- * reference therefore gives this stage a stable snapshot at zero cost — no
275
- * clone, which is the entire point of #13. The transaction buffer's
276
- * net-change diff base rests on the same guarantee: it IS this view.
277
- *
278
- * WHY FIRST TOUCH, not first write: the pre-#13 eager engine cloned the
279
- * state into the buffer at the stage's first ACCESS, anchoring both its
280
- * snapshot reads and its commit baseline (the net-change diff base) there.
281
- * #13's first cut anchored the lazy buffer at first WRITE — observably
282
- * different when something else commits in the gap between this stage's
283
- * first read and its first write. That gap is REACHABLE: fork siblings are
284
- * namespace-isolated for run-scoped keys (each child writes under
285
- * `runs/<childId>/`), but ROOT-level keys are shared — written via
286
- * `setGlobal` from consumer scope code and, critically, by
287
- * `SubflowInputMapper`'s output mapping (`parentContext.setGlobal`), which
288
- * is exactly what runs when a subflow is a fork branch. A sibling's
289
- * root-key commit landing in the gap would shift this stage's diff base,
290
- * making its CommitBundle record a phantom change (or swallow a real one)
291
- * relative to the eager engine. Anchoring the view at first touch restores
292
- * the EXACT eager semantics — sequential AND parallel — at zero clone cost.
293
- *
294
- * Read visibility is two-tier, matching eager byte-for-byte: keys present
295
- * in the view at first touch read repeatably from it; keys ABSENT from it
296
- * fall back to LIVE state (the eager engine's exact fallback — a
297
- * mid-flight sibling root-key write was always visible to reads, and
298
- * stays visible; only the DIFF BASE is pinned).
299
- */
300
- private firstTouchState;
301
- /** Lazily creates the transaction buffer on the stage's FIRST WRITE (#13).
302
- *
303
- * Reads NEVER construct it: read-your-writes only matters once a staged
304
- * write exists, so before that {@link getValue}/{@link getValueDirect}
305
- * serve from the first-touch state view and {@link commit} records an
306
- * empty bundle — all with ZERO `structuredClone`s of the shared state.
307
- *
308
- * The buffer's base is the FIRST-TOUCH view, NOT the live state at write
309
- * time: under parallel forks a sibling may have committed between this
310
- * stage's first read and this write, and the net-change diff base must
311
- * stay anchored at first touch to match the eager engine — see
312
- * {@link firstTouchState}. */
313
- getTransactionBuffer(): TransactionBuffer;
314
- /**
315
- * Where this frame writes and reads: `['runs', <id>]`, or `[]` (the root) with
316
- * no run id. Handed to the record layer as data (C2): the buffer's address,
317
- * and where `SharedMemory · getValue` looks before the root.
318
- */
319
- private get address();
320
- /** Builds an absolute path inside the shared memory: this frame's {@link address}, then the path. */
321
- private withNamespace;
322
- /** The run namespace writes and reads go to: {@link addressRunId}, else `runId`. */
323
- private get namespaceId();
324
256
  /**
325
257
  * Write and read at ANOTHER frame's address (its run namespace) while this
326
258
  * frame keeps its own identity on the record — `stage`, `stageId`,
@@ -328,9 +260,13 @@ export declare class StageContext {
328
260
  * (`SubflowExecutor · executeSubflow`, R13): the mount frame of a branch or
329
261
  * fork child lands its values where its parent writes, as before, and its
330
262
  * bundle now names the mount instead of the stage before it. Refused once
331
- * the frame has staged anything — its buffer's address is fixed then.
263
+ * the frame has staged anything — its buffer's address is fixed then. The
264
+ * decision is the engine's (namespace ids, as since R13); the record frame
265
+ * takes the address it comes to (`RecordFrame · useAddress`).
332
266
  */
333
267
  useAddressOf(frame: StageContext): void;
268
+ /** The run namespace writes and reads go to: {@link addressRunId}, else `runId`. */
269
+ private get namespaceId();
334
270
  patch(path: string[], key: string, value: unknown, shouldRedact?: boolean): RedactionVerdict;
335
271
  set(path: string[], key: string, value: unknown): void;
336
272
  merge(path: string[], key: string, value: unknown, shouldRedact?: boolean): RedactionVerdict;
@@ -342,26 +278,6 @@ export declare class StageContext {
342
278
  updateGlobalContext(key: string, value: unknown): void;
343
279
  appendToArray(path: string[], key: string, items: unknown[], description?: string): void;
344
280
  mergeObject(path: string[], key: string, obj: Record<string, unknown>, description?: string): void;
345
- /** Buffer-aware read, mirroring the eager engine's read order byte-for-byte:
346
- *
347
- * 1. staged writes + first-touch snapshot — `buffer.get` over its
348
- * workingCopy when the buffer exists, else `nativeGet` over the
349
- * zero-clone state view (the buffer's base IS that view, so the two
350
- * tiers agree on content);
351
- * 2. LIVE state via `sharedMemory.getValue` for keys absent from the
352
- * snapshot — including its run→global namespace fallback. The eager
353
- * engine had this exact live fallback for snapshot-missing keys;
354
- * byte-identity over purity. After the stage's first write such a
355
- * value can be the very container the buffer's diff base holds at
356
- * the path (the stage deleted or unset it, or replaced a container
357
- * above it), so the base is detached there first
358
- * (`TransactionBuffer · detachBase`): an in-place edit of the value
359
- * (out of contract) written back is recorded, as on 9.28.0, whose
360
- * base was a clone taken at the first write.
361
- *
362
- * Reads never construct the buffer (#13): a stage that never writes
363
- * performs zero clones of the shared state. */
364
- private readState;
365
281
  /**
366
282
  * Tracked read. The returned value is BORROWED — see the contract on
367
283
  * `ScopeFacade.getValue`. Read-tracking cost is policy-gated (#14):
@@ -420,8 +336,8 @@ export declare class StageContext {
420
336
  * those are engine reads (the subflow merge-back), not user reads.
421
337
  *
422
338
  * It also only looks at keys served from the PINNED source — the first-touch
423
- * view or this stage's own buffer. A key absent from both was served by
424
- * `readState`'s live fallback, which a parallel sibling's root-key commit can
339
+ * view or this stage's own buffer. A key absent from both was served by the
340
+ * read's live fallback (`RecordFrame · read`, tier 2), which a parallel sibling's root-key commit can
425
341
  * legitimately move; accusing the stage there would be a false alarm. For
426
342
  * the same reason it runs on the frame's FIRST commit only: the reads belong
427
343
  * to that round, and by the engine's second round (a fork double-commit, a
@@ -453,21 +369,16 @@ export declare class StageContext {
453
369
  * `outputMapper` (a lazy mount, every `parallelForEach` branch), whose exit
454
370
  * is its only bundle, records that bundle as its own, tags and all.
455
371
  *
456
- * Commit is the stage's lifecycle end: `buffer` (its working copy and
457
- * whatever private copies its reads took) and `stateView` (a reference that
458
- * pins one committed-state GENERATION) are only needed DURING execution,
459
- * as the read snapshot + net-change diff base. The execution tree retains
460
- * every StageContext for the lifetime of the run, so WITHOUT the release a
461
- * long loop retains one state generation per executed stage — measured
462
- * O(N²) before copy-on-write (9.29.0), when each generation and each
463
- * buffer was a whole-state clone: 563.8MB at N=200 on an agent-style
464
- * chart; a 500-iteration agent OOMed a default Node heap (backlog #18).
465
- * Generations now share every unchanged subtree, but a pinned one still
466
- * keeps the containers later commits replaced alive.
372
+ * Commit is the stage's lifecycle end: the record frame's buffer and
373
+ * first-touch base are only needed DURING execution, as the read snapshot +
374
+ * net-change diff base, so the record frame releases them once the commit
375
+ * has landed and the observer has seen it (`RecordFrame · release` — why a
376
+ * frame that kept them would retain one state generation per executed
377
+ * stage, and why a re-used frame re-anchors on current state, is there).
467
378
  *
468
- * RE-USE AFTER COMMIT stays correct because both fields re-create lazily:
469
- * - a later READ re-anchors via {@link firstTouchState} on the CURRENT
470
- * committed state (which includes this stage's own flushed writes);
379
+ * RE-USE AFTER COMMIT stays correct because both re-create lazily:
380
+ * - a later READ re-anchors on the CURRENT committed state (which includes
381
+ * this stage's own flushed writes);
471
382
  * - a later WRITE constructs a fresh buffer on that re-anchored view, so a
472
383
  * second commit diffs against post-first-commit state. The pre-release
473
384
  * buffer behaved the same for VALUES (its `workingCopy` was reset on
@@ -498,20 +409,18 @@ export declare class StageContext {
498
409
  * (M1: the transaction buffer holds writes until `commit()` flushes them).
499
410
  *
500
411
  * What is released, and why each one matters for the next attempt:
501
- * - `buffer` — the staged writes themselves; the next attempt starts
502
- * with nothing staged;
503
- * - `stateView` — the first-touch anchor; the next attempt re-anchors on
504
- * committed state as it stands NOW (a sibling fork branch
505
- * may legitimately have committed in between);
412
+ * - the record frame's staged state (`RecordFrame · discard`) — the buffer
413
+ * (the next attempt starts with nothing staged), the
414
+ * first-touch base (it re-anchors on committed state as
415
+ * it stands NOW — a sibling fork branch may legitimately
416
+ * have committed in between) and the readKeys list (#P1:
417
+ * a discarded attempt's reads must never reach the next
418
+ * attempt's `TraceEntry.readKeys`);
506
419
  * - `_stageWrites` / `_pendingWrites` / `_stageReads` — the snapshot
507
420
  * payload; without the reset the execution tree would
508
421
  * report writes that were discarded, which is the exact
509
422
  * lie this feature exists to prevent (the pending map
510
423
  * holds bare references — dropping it un-clones nothing);
511
- * - `_provenanceReads` — the per-write read prefix (#P1); a discarded
512
- * attempt's reads must never appear in the next attempt's
513
- * `TraceEntry.readKeys`, or a backward slice would follow
514
- * an edge that no committed write ever had;
515
424
  * - `_untrackedSources` — the D2 honesty markers, released with the rest.
516
425
  *
517
426
  * What is deliberately KEPT: `debug` (logs, metrics, errors, flow messages).