footprintjs 9.48.2 → 10.0.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.
- package/AGENTS.md +12 -10
- package/CLAUDE.md +21 -23
- package/README.md +1 -1
- package/dist/advanced.js +71 -128
- package/dist/esm/advanced.d.ts +24 -58
- package/dist/esm/advanced.js +13 -51
- package/dist/esm/index.d.ts +5 -8
- package/dist/esm/index.js +3 -3
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
- package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/esm/lib/capture/index.d.ts +0 -1
- package/dist/esm/lib/capture/index.js +1 -2
- package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
- package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
- package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
- package/dist/esm/lib/engine/index.d.ts +1 -1
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
- package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
- package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
- package/dist/esm/lib/engine/traversalContext.js +2 -2
- package/dist/esm/lib/engine/types.d.ts +2 -10
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
- package/dist/esm/lib/ids/reservedIds.js +2 -2
- package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
- package/dist/esm/lib/memory/StageContext.d.ts +2 -4
- package/dist/esm/lib/memory/StageContext.js +2 -2
- package/dist/esm/lib/memory/borrowedMutation.js +2 -2
- package/dist/esm/lib/memory/index.d.ts +6 -21
- package/dist/esm/lib/memory/index.js +4 -22
- package/dist/esm/lib/memory/redaction.d.ts +1 -1
- package/dist/esm/lib/memory/redaction.js +2 -2
- package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
- package/dist/esm/lib/memory/runPolicy.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +2 -2
- package/dist/esm/lib/reactive/writeTraps.js +2 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
- package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
- package/dist/esm/lib/recorder/qualityTrace.js +2 -2
- package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
- package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
- package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
- package/dist/esm/lib/runner/resume.js +2 -2
- package/dist/esm/lib/runner/snapshot.js +3 -2
- package/dist/esm/lib/scope/ScopeFacade.js +2 -2
- package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
- package/dist/esm/recorders.d.ts +2 -3
- package/dist/esm/recorders.js +1 -1
- package/dist/esm/trace.d.ts +11 -57
- package/dist/esm/trace.js +10 -68
- package/dist/index.js +3 -3
- package/dist/lib/builder/FlowChartBuilder.js +5 -5
- package/dist/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/lib/capture/index.js +2 -4
- package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
- package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
- package/dist/lib/engine/traversalContext.js +4 -4
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +3 -3
- package/dist/lib/ids/reservedIds.js +5 -5
- package/dist/lib/memory/DiagnosticCollector.js +3 -3
- package/dist/lib/memory/StageContext.js +3 -3
- package/dist/lib/memory/borrowedMutation.js +3 -3
- package/dist/lib/memory/index.js +7 -42
- package/dist/lib/memory/redaction.js +3 -3
- package/dist/lib/memory/runPolicy.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +3 -3
- package/dist/lib/reactive/writeTraps.js +4 -4
- package/dist/lib/recorder/ControlDepRecorder.js +3 -2
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +3 -3
- package/dist/lib/recorder/qualityTrace.js +4 -4
- package/dist/lib/runner/DeferredObserverTier.js +3 -3
- package/dist/lib/runner/ExecutionRuntime.js +6 -9
- package/dist/lib/runner/FlowChartExecutor.js +1 -1
- package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
- package/dist/lib/runner/resume.js +3 -3
- package/dist/lib/runner/snapshot.js +6 -5
- package/dist/lib/scope/ScopeFacade.js +3 -3
- package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
- package/dist/recorders.js +1 -1
- package/dist/trace.js +18 -120
- package/dist/types/advanced.d.ts +24 -58
- package/dist/types/index.d.ts +5 -8
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
- package/dist/types/lib/capture/index.d.ts +0 -1
- package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
- package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
- package/dist/types/lib/engine/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
- package/dist/types/lib/engine/narrative/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
- package/dist/types/lib/engine/traversalContext.d.ts +1 -1
- package/dist/types/lib/engine/types.d.ts +2 -10
- package/dist/types/lib/memory/StageContext.d.ts +2 -4
- package/dist/types/lib/memory/index.d.ts +6 -21
- package/dist/types/lib/memory/redaction.d.ts +1 -1
- package/dist/types/lib/memory/runPolicy.d.ts +3 -2
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
- package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
- package/dist/types/recorders.d.ts +2 -3
- package/dist/types/trace.d.ts +11 -57
- package/package.json +6 -15
- package/dist/esm/lib/capture/freeze.d.ts +0 -91
- package/dist/esm/lib/capture/freeze.js +0 -314
- package/dist/esm/lib/capture/ownData.d.ts +0 -7
- package/dist/esm/lib/capture/ownData.js +0 -15
- package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
- package/dist/esm/lib/capture/valueKinds.js +0 -142
- package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
- package/dist/esm/lib/ids/runtimeStageId.js +0 -194
- package/dist/esm/lib/memory/EventLog.d.ts +0 -105
- package/dist/esm/lib/memory/EventLog.js +0 -148
- package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
- package/dist/esm/lib/memory/RecordFrame.js +0 -296
- package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
- package/dist/esm/lib/memory/SharedMemory.js +0 -88
- package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
- package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
- package/dist/esm/lib/memory/admission.d.ts +0 -81
- package/dist/esm/lib/memory/admission.js +0 -153
- package/dist/esm/lib/memory/backtrack.d.ts +0 -286
- package/dist/esm/lib/memory/backtrack.js +0 -457
- package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
- package/dist/esm/lib/memory/commitLogUtils.js +0 -384
- package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
- package/dist/esm/lib/memory/deltaEncoding.js +0 -122
- package/dist/esm/lib/memory/equality.d.ts +0 -93
- package/dist/esm/lib/memory/equality.js +0 -262
- package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
- package/dist/esm/lib/memory/eventPosition.js +0 -2
- package/dist/esm/lib/memory/honesty.d.ts +0 -93
- package/dist/esm/lib/memory/honesty.js +0 -92
- package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
- package/dist/esm/lib/memory/keyPaths.js +0 -227
- package/dist/esm/lib/memory/logModel.d.ts +0 -76
- package/dist/esm/lib/memory/logModel.js +0 -364
- package/dist/esm/lib/memory/merge.d.ts +0 -26
- package/dist/esm/lib/memory/merge.js +0 -60
- package/dist/esm/lib/memory/pathOps.d.ts +0 -115
- package/dist/esm/lib/memory/pathOps.js +0 -290
- package/dist/esm/lib/memory/paths.d.ts +0 -52
- package/dist/esm/lib/memory/paths.js +0 -57
- package/dist/esm/lib/memory/placeholders.d.ts +0 -39
- package/dist/esm/lib/memory/placeholders.js +0 -40
- package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
- package/dist/esm/lib/memory/recordCommit.js +0 -61
- package/dist/esm/lib/memory/scrub.d.ts +0 -53
- package/dist/esm/lib/memory/scrub.js +0 -74
- package/dist/esm/lib/memory/types.d.ts +0 -209
- package/dist/esm/lib/memory/types.js +0 -10
- package/dist/esm/lib/memory/utils.d.ts +0 -73
- package/dist/esm/lib/memory/utils.js +0 -159
- package/dist/esm/lib/memory/verbs.d.ts +0 -333
- package/dist/esm/lib/memory/verbs.js +0 -427
- package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
- package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
- package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
- package/dist/esm/lib/scope/detectCircular.js +0 -14
- package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
- package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
- package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
- package/dist/esm/lib/slice/elementProvenance.js +0 -190
- package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
- package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
- package/dist/esm/lib/slice/index.d.ts +0 -25
- package/dist/esm/lib/slice/index.js +0 -25
- package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
- package/dist/esm/lib/slice/keyIndex.js +0 -293
- package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
- package/dist/esm/lib/slice/keyTimeline.js +0 -113
- package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
- package/dist/esm/lib/slice/keysReadSources.js +0 -95
- package/dist/esm/lib/slice/serialize.d.ts +0 -78
- package/dist/esm/lib/slice/serialize.js +0 -278
- package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
- package/dist/esm/lib/slice/sliceForKey.js +0 -88
- package/dist/esm/lib/slice/types.d.ts +0 -567
- package/dist/esm/lib/slice/types.js +0 -25
- package/dist/esm/lib/time-travel/axis.d.ts +0 -119
- package/dist/esm/lib/time-travel/axis.js +0 -179
- package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
- package/dist/esm/lib/time-travel/bundles.js +0 -136
- package/dist/esm/lib/time-travel/chain.d.ts +0 -93
- package/dist/esm/lib/time-travel/chain.js +0 -188
- package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
- package/dist/esm/lib/time-travel/commitStops.js +0 -202
- package/dist/esm/lib/time-travel/index.d.ts +0 -22
- package/dist/esm/lib/time-travel/index.js +0 -21
- package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
- package/dist/esm/lib/time-travel/stateAt.js +0 -153
- package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
- package/dist/esm/lib/time-travel/tagStops.js +0 -102
- package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
- package/dist/esm/lib/time-travel/timeTravel.js +0 -360
- package/dist/esm/lib/time-travel/types.d.ts +0 -470
- package/dist/esm/lib/time-travel/types.js +0 -23
- package/dist/esm/write.d.ts +0 -47
- package/dist/esm/write.js +0 -46
- package/dist/lib/capture/freeze.js +0 -320
- package/dist/lib/capture/ownData.js +0 -19
- package/dist/lib/capture/valueKinds.js +0 -146
- package/dist/lib/ids/runtimeStageId.js +0 -210
- package/dist/lib/memory/EventLog.js +0 -152
- package/dist/lib/memory/RecordFrame.js +0 -300
- package/dist/lib/memory/SharedMemory.js +0 -92
- package/dist/lib/memory/TransactionBuffer.js +0 -950
- package/dist/lib/memory/admission.js +0 -159
- package/dist/lib/memory/backtrack.js +0 -463
- package/dist/lib/memory/commitLogUtils.js +0 -399
- package/dist/lib/memory/deltaEncoding.js +0 -128
- package/dist/lib/memory/equality.js +0 -266
- package/dist/lib/memory/eventPosition.js +0 -3
- package/dist/lib/memory/honesty.js +0 -95
- package/dist/lib/memory/keyPaths.js +0 -243
- package/dist/lib/memory/logModel.js +0 -372
- package/dist/lib/memory/merge.js +0 -64
- package/dist/lib/memory/pathOps.js +0 -306
- package/dist/lib/memory/paths.js +0 -62
- package/dist/lib/memory/placeholders.js +0 -43
- package/dist/lib/memory/recordCommit.js +0 -65
- package/dist/lib/memory/scrub.js +0 -79
- package/dist/lib/memory/types.js +0 -11
- package/dist/lib/memory/utils.js +0 -178
- package/dist/lib/memory/verbs.js +0 -444
- package/dist/lib/recorder/CommitRangeIndex.js +0 -211
- package/dist/lib/scope/detectCircular.js +0 -21
- package/dist/lib/scope/recorders/summarizeValue.js +0 -10
- package/dist/lib/slice/elementProvenance.js +0 -195
- package/dist/lib/slice/forwardSliceForKey.js +0 -247
- package/dist/lib/slice/index.js +0 -42
- package/dist/lib/slice/keyIndex.js +0 -313
- package/dist/lib/slice/keyTimeline.js +0 -117
- package/dist/lib/slice/keysReadSources.js +0 -101
- package/dist/lib/slice/serialize.js +0 -286
- package/dist/lib/slice/sliceForKey.js +0 -93
- package/dist/lib/slice/types.js +0 -26
- package/dist/lib/time-travel/axis.js +0 -184
- package/dist/lib/time-travel/bundles.js +0 -144
- package/dist/lib/time-travel/chain.js +0 -193
- package/dist/lib/time-travel/commitStops.js +0 -206
- package/dist/lib/time-travel/index.js +0 -32
- package/dist/lib/time-travel/stateAt.js +0 -160
- package/dist/lib/time-travel/tagStops.js +0 -106
- package/dist/lib/time-travel/timeTravel.js +0 -364
- package/dist/lib/time-travel/types.js +0 -24
- package/dist/types/lib/capture/freeze.d.ts +0 -91
- package/dist/types/lib/capture/ownData.d.ts +0 -7
- package/dist/types/lib/capture/valueKinds.d.ts +0 -57
- package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
- package/dist/types/lib/memory/EventLog.d.ts +0 -105
- package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
- package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
- package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
- package/dist/types/lib/memory/admission.d.ts +0 -81
- package/dist/types/lib/memory/backtrack.d.ts +0 -286
- package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
- package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
- package/dist/types/lib/memory/equality.d.ts +0 -93
- package/dist/types/lib/memory/eventPosition.d.ts +0 -18
- package/dist/types/lib/memory/honesty.d.ts +0 -93
- package/dist/types/lib/memory/keyPaths.d.ts +0 -125
- package/dist/types/lib/memory/logModel.d.ts +0 -76
- package/dist/types/lib/memory/merge.d.ts +0 -26
- package/dist/types/lib/memory/pathOps.d.ts +0 -115
- package/dist/types/lib/memory/paths.d.ts +0 -52
- package/dist/types/lib/memory/placeholders.d.ts +0 -39
- package/dist/types/lib/memory/recordCommit.d.ts +0 -45
- package/dist/types/lib/memory/scrub.d.ts +0 -53
- package/dist/types/lib/memory/types.d.ts +0 -209
- package/dist/types/lib/memory/utils.d.ts +0 -73
- package/dist/types/lib/memory/verbs.d.ts +0 -333
- package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
- package/dist/types/lib/scope/detectCircular.d.ts +0 -13
- package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
- package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
- package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
- package/dist/types/lib/slice/index.d.ts +0 -25
- package/dist/types/lib/slice/keyIndex.d.ts +0 -137
- package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
- package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
- package/dist/types/lib/slice/serialize.d.ts +0 -78
- package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
- package/dist/types/lib/slice/types.d.ts +0 -567
- package/dist/types/lib/time-travel/axis.d.ts +0 -119
- package/dist/types/lib/time-travel/bundles.d.ts +0 -77
- package/dist/types/lib/time-travel/chain.d.ts +0 -93
- package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
- package/dist/types/lib/time-travel/index.d.ts +0 -22
- package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
- package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
- package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
- package/dist/types/lib/time-travel/types.d.ts +0 -470
- package/dist/types/write.d.ts +0 -47
- package/dist/write.js +0 -52
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
|
|
3
|
-
*
|
|
4
|
-
* WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
|
|
5
|
-
* kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
|
|
6
|
-
* the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
|
|
7
|
-
* no other `src/` file spells it.
|
|
8
|
-
*
|
|
9
|
-
* ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
|
|
10
|
-
* strings, and both are historical, so neither may change (stored recordings hold this one). Which
|
|
11
|
-
* one a reader sees depends on WHERE it reads, and each has the owner its reader has:
|
|
12
|
-
* - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
|
|
13
|
-
* served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
|
|
14
|
-
* passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
|
|
15
|
-
* seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
|
|
16
|
-
* (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
|
|
17
|
-
* - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
|
|
18
|
-
* writes, recorder events, the narrative. It lives beside the verdict that writes it
|
|
19
|
-
* (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
|
|
20
|
-
* the record took the engine's string with it.
|
|
21
|
-
*
|
|
22
|
-
* WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
|
|
23
|
-
* reasons to change: this string is written on the engine's WRITE path on every redacted run, the
|
|
24
|
-
* honesty registry is read by a reader that explains a recording — and the registry's sentences have
|
|
25
|
-
* no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
|
|
26
|
-
* (the layer table is `scripts/layering.config.cjs`).
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
|
|
30
|
-
*
|
|
31
|
-
* `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
|
|
32
|
-
* mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
|
|
33
|
-
* reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
|
|
34
|
-
* re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
|
|
35
|
-
* (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
|
|
36
|
-
* `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
|
|
37
|
-
* well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
|
|
38
|
-
*/
|
|
39
|
-
export const LOG_PLACEHOLDER = 'REDACTED';
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwbGFjZWhvbGRlcnMudHMg4oCUIHRoZSBzdHJpbmcgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLCBpbiB0aGUgUkVDT1JELlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgYSBwbGFjZWhvbGRlciBhcyBhIGxpdGVyYWwsIGFuZCBhIHNwZWxsaW5nXG4gKiBrZXB0IGluIHNpeCBwbGFjZXMgaXMgYSBwbGFjZWhvbGRlciBhIHJlYWRlciBjYW4gbm8gbG9uZ2VyIG1hdGNoIG9uLiBFdmVyeSBgc3JjL2AgZmlsZSB0aGF0IHdyaXRlc1xuICogdGhlIGxvZydzIHBsYWNlaG9sZGVyIGltcG9ydHMgaXQgZnJvbSBoZXJlLCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL3BsYWNlaG9sZGVycy50ZXN0LnRzYCBwaW5zIHRoYXRcbiAqIG5vIG90aGVyIGBzcmMvYCBmaWxlIHNwZWxscyBpdC5cbiAqXG4gKiBPTkUgU1RSSU5HIEhFUkUsIElUUyBUV0lOIE9OIFRIRSBWRVJESUNUJ1MgU0lERSAoQzQsIHJldmlldyBOMikuIEEgcmVkYWN0aW9uIGxlYXZlcyBvbmUgb2YgdHdvXG4gKiBzdHJpbmdzLCBhbmQgYm90aCBhcmUgaGlzdG9yaWNhbCwgc28gbmVpdGhlciBtYXkgY2hhbmdlIChzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoaXMgb25lKS4gV2hpY2hcbiAqIG9uZSBhIHJlYWRlciBzZWVzIGRlcGVuZHMgb24gV0hFUkUgaXQgcmVhZHMsIGFuZCBlYWNoIGhhcyB0aGUgb3duZXIgaXRzIHJlYWRlciBoYXM6XG4gKiAgIC0ge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKGAnUkVEQUNURUQnYCwgaGVyZSkgaXMgYSBSRUNPUkQgYnl0ZTogdGhlIGNvbW1pdCBsb2cgYW5kIGV2ZXJ5dGhpbmdcbiAqICAgICBzZXJ2ZWQgZnJvbSBpdCDigJQgd3JpdHRlbiBpbnRvIHRoZSBsb2cgYnkgdGhlIHJlY29yZCdzIHNjcnViIChgbWVtb3J5L3NjcnViLnRzYCwgTDIpLCBhbmRcbiAqICAgICBwYXNzZWQgYnkgdGhlIHR3byBwbGFjZXMgdGhhdCBzZXJ2ZSBhIG1pcnJvciAoYHJ1bm5lci9FeGVjdXRpb25SdW50aW1lLnRzYCwgdGhlIG1pcnJvcidzXG4gKiAgICAgc2VlZDsgYGVuZ2luZS9oYW5kbGVycy9TdWJmbG93RXhlY3V0b3IudHNgLCBhIHN1YmZsb3cncyBzZXJ2ZWQgc3RhdGUpLiBUaGUgcmVhZGVyc1xuICogICAgIChgc2xpY2UvYCwgYHRpbWUtdHJhdmVsL2ApIG9ubHkgbmFtZSBpdCBpbiB0aGVpciBkb2NzOiB0aGV5IG1lZXQgaXQgYXMgZGF0YSBpbiB0aGUgbG9nO1xuICogICAtIGBTQ09QRV9QTEFDRUhPTERFUmAgKGAnW1JFREFDVEVEXSdgKSBpcyB0aGUgRU5HSU5FJ3M6IHRoZSBzY29wZSBjaGFubmVsJ3MgcmV0YWluZWQgcmVhZHMgYW5kXG4gKiAgICAgd3JpdGVzLCByZWNvcmRlciBldmVudHMsIHRoZSBuYXJyYXRpdmUuIEl0IGxpdmVzIGJlc2lkZSB0aGUgdmVyZGljdCB0aGF0IHdyaXRlcyBpdFxuICogICAgIChgbWVtb3J5L3JlZGFjdGlvbi50c2AsIEw0KS4gVW50aWwgQzQgYm90aCBzYXQgaW4gdGhpcyBmaWxlIChcInR3byBwbGFjZWhvbGRlcnMsIG9uZSBsZWFmXCIpO1xuICogICAgIHRoZSByZWNvcmQgdG9vayB0aGUgZW5naW5lJ3Mgc3RyaW5nIHdpdGggaXQuXG4gKlxuICogV0hZIEEgTEVBRiBPRiBJVFMgT1dOIChhbmQgbm90IGJlc2lkZSBgaG9uZXN0eS50cyDCtyBIT05FU1RZX0NPREVTYCkuIERpZmZlcmVudCByZWFkZXJzLCBkaWZmZXJlbnRcbiAqIHJlYXNvbnMgdG8gY2hhbmdlOiB0aGlzIHN0cmluZyBpcyB3cml0dGVuIG9uIHRoZSBlbmdpbmUncyBXUklURSBwYXRoIG9uIGV2ZXJ5IHJlZGFjdGVkIHJ1biwgdGhlXG4gKiBob25lc3R5IHJlZ2lzdHJ5IGlzIHJlYWQgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlXG4gKiBubyBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwXG4gKiAodGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgKS5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9zY3J1Yi50cyDCtyBzY3J1YlBhdGNoYCB3cml0ZXMgaXQgaW50byB0aGUgcGF0Y2ggdGhlIGxvZyByZWNvcmRzIChib3RoIGVuY29kaW5ncyksIGFuZCB0aGVcbiAqIG1pcnJvcidzIHNlZWQgaXMgc2NydWJiZWQgd2l0aCB0aGUgc2FtZSBzdHJpbmcgKGBydW5uZXIvRXhlY3V0aW9uUnVudGltZS50c2ApLCBzbyBhIGZvbGQgb2YgdGhlIGxvZ1xuICogcmVwcm9kdWNlcyBpdCAoYHN0YXRlQXRgIOKGkiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRQYXRoc2ApIGFuZCBhIHNsaWNlIG9yIGFuIGVsZW1lbnQgYmlydGgsIHdoaWNoXG4gKiByZS1zZXJ2ZSB0aGUgbG9nJ3MgYnl0ZXMsIHNob3cgaXQgdG9vLiBBIHN1YmZsb3cncyBTRVJWRUQgc3RhdGUgaXMgdGhlIHN1YmZsb3cncyBvd24gbmVzdGVkIG1pcnJvclxuICogKDkuMjAuMCk6IGBzdWJmbG93UmVzdWx0c1sqXS50cmVlQ29udGV4dC5nbG9iYWxDb250ZXh0YCB1bmRlciBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLCBhbmRcbiAqIGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyB0aGF0IG1pcnJvciDigJQgc28gdGhvc2UgY2FycnkgdGhpcyBzdHJpbmcgYXNcbiAqIHdlbGwsIG5vdCB0aGUgc2NvcGUgY2hhbm5lbCdzIGBTQ09QRV9QTEFDRUhPTERFUmAgKGBtZW1vcnkvcmVkYWN0aW9uLnRzYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0dfUExBQ0VIT0xERVIgPSAnUkVEQUNURUQnO1xuIl19
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* recordCommit — one stage's commit onto the record (C1, L3). The one owner of a bundle's bytes and
|
|
3
|
-
* of where a commit lands: live state, the redacted mirror, the log.
|
|
4
|
-
*
|
|
5
|
-
* THE LAW:
|
|
6
|
-
* 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
|
|
7
|
-
* moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
|
|
8
|
-
* 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
|
|
9
|
-
* anything moves; then its raw rows build live state's next generation, `scrubPatch`
|
|
10
|
-
* (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
|
|
11
|
-
* (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
|
|
12
|
-
* never the raw ones. The redacted paths are data by now: the engine decided them per write
|
|
13
|
-
* (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
|
|
14
|
-
* 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
|
|
15
|
-
* `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
|
|
16
|
-
* when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
|
|
17
|
-
* names are names: no redaction reads them, and no encoding (`commitValues`) changes them.
|
|
18
|
-
*
|
|
19
|
-
* The frame (`StageContext`) decides WHAT is committed — the payload, the names, whether the bundle
|
|
20
|
-
* is a continuation — and keeps what is not the record: retention, diagnostics, the dev-mode
|
|
21
|
-
* warnings and the commit observer.
|
|
22
|
-
*/
|
|
23
|
-
import type { EventLog } from './EventLog.js';
|
|
24
|
-
import type { SharedMemory } from './SharedMemory.js';
|
|
25
|
-
import type { TransactionBuffer } from './TransactionBuffer.js';
|
|
26
|
-
import type { CommitPhase, UntrackedSource } from './types.js';
|
|
27
|
-
/** One stage's net change, as `TransactionBuffer · commit` hands it over. */
|
|
28
|
-
export type CommitPayload = ReturnType<TransactionBuffer['commit']>;
|
|
29
|
-
/** What names a commit on the record, beside its payload (law 3). */
|
|
30
|
-
export interface CommitStamp {
|
|
31
|
-
stage: string;
|
|
32
|
-
stageId: string;
|
|
33
|
-
runtimeStageId: string;
|
|
34
|
-
untrackedSources?: ReadonlySet<UntrackedSource>;
|
|
35
|
-
tags?: readonly string[];
|
|
36
|
-
phase?: CommitPhase;
|
|
37
|
-
}
|
|
38
|
-
/** Where a commit lands: live state always; the mirror and the log when the run keeps them. */
|
|
39
|
-
export interface CommitTargets {
|
|
40
|
-
state: SharedMemory;
|
|
41
|
-
mirror?: SharedMemory;
|
|
42
|
-
log?: EventLog;
|
|
43
|
-
}
|
|
44
|
-
/** Record one commit (the module law). `payload` absent = the empty commit. */
|
|
45
|
-
export declare function recordCommit(payload: CommitPayload | undefined, stamp: CommitStamp, into: CommitTargets): void;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* recordCommit — one stage's commit onto the record (C1, L3). The one owner of a bundle's bytes and
|
|
3
|
-
* of where a commit lands: live state, the redacted mirror, the log.
|
|
4
|
-
*
|
|
5
|
-
* THE LAW:
|
|
6
|
-
* 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
|
|
7
|
-
* moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
|
|
8
|
-
* 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
|
|
9
|
-
* anything moves; then its raw rows build live state's next generation, `scrubPatch`
|
|
10
|
-
* (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
|
|
11
|
-
* (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
|
|
12
|
-
* never the raw ones. The redacted paths are data by now: the engine decided them per write
|
|
13
|
-
* (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
|
|
14
|
-
* 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
|
|
15
|
-
* `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
|
|
16
|
-
* when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
|
|
17
|
-
* names are names: no redaction reads them, and no encoding (`commitValues`) changes them.
|
|
18
|
-
*
|
|
19
|
-
* The frame (`StageContext`) decides WHAT is committed — the payload, the names, whether the bundle
|
|
20
|
-
* is a continuation — and keeps what is not the record: retention, diagnostics, the dev-mode
|
|
21
|
-
* warnings and the commit observer.
|
|
22
|
-
*/
|
|
23
|
-
import { scrubPatch } from './scrub.js';
|
|
24
|
-
/** Record one commit (the module law). `payload` absent = the empty commit. */
|
|
25
|
-
export function recordCommit(payload, stamp, into) {
|
|
26
|
-
if (payload === undefined) {
|
|
27
|
-
into.log?.record(bundleOf({}, {}, [], [], namesOf(stamp)));
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const names = namesOf(stamp);
|
|
31
|
-
const { redactedPaths, trace } = payload;
|
|
32
|
-
into.state.applyPatch(payload.overwrite, payload.updates, trace);
|
|
33
|
-
const overwrite = scrubPatch(payload.overwrite, redactedPaths);
|
|
34
|
-
const updates = scrubPatch(payload.updates, redactedPaths);
|
|
35
|
-
into.mirror?.applyPatch(overwrite, updates, trace);
|
|
36
|
-
into.log?.record(bundleOf(overwrite, updates, [...redactedPaths], trace, names));
|
|
37
|
-
}
|
|
38
|
-
/** THE bundle (law 3): the payload's four keys, the three names, then each optional name that has something to say. */
|
|
39
|
-
function bundleOf(overwrite, updates, redactedPaths, trace, names) {
|
|
40
|
-
const { stage, stageId, runtimeStageId, untrackedSources, tags, phase } = names;
|
|
41
|
-
const bundle = { overwrite, updates, redactedPaths, trace, stage, stageId, runtimeStageId };
|
|
42
|
-
if (untrackedSources)
|
|
43
|
-
bundle.untrackedSources = untrackedSources;
|
|
44
|
-
if (tags)
|
|
45
|
-
bundle.tags = tags;
|
|
46
|
-
if (phase)
|
|
47
|
-
bundle.phase = phase;
|
|
48
|
-
return bundle;
|
|
49
|
-
}
|
|
50
|
-
/** The names, read once — before anything moves (law 2). An optional one with nothing to say is `undefined`. */
|
|
51
|
-
function namesOf({ stage, stageId, runtimeStageId, untrackedSources, tags, phase }) {
|
|
52
|
-
return {
|
|
53
|
-
stage,
|
|
54
|
-
stageId,
|
|
55
|
-
runtimeStageId,
|
|
56
|
-
untrackedSources: !untrackedSources || untrackedSources.size === 0 ? undefined : [...untrackedSources],
|
|
57
|
-
tags: !tags || tags.length === 0 ? undefined : tags,
|
|
58
|
-
phase: phase || undefined,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkQ29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcmVjb3JkQ29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFHSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBMkJ4QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFrQyxFQUFFLEtBQWtCLEVBQUUsSUFBbUI7SUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsdUhBQXVIO0FBQ3ZILFNBQVMsUUFBUSxDQUNmLFNBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLGFBQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLEtBQVk7SUFFWixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBaUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUMxRyxJQUFJLGdCQUFnQjtRQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqRSxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLEtBQUs7UUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBZTtJQUM3RixPQUFPO1FBQ0wsS0FBSztRQUNMLE9BQU87UUFDUCxjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZENvbW1pdCDigJQgb25lIHN0YWdlJ3MgY29tbWl0IG9udG8gdGhlIHJlY29yZCAoQzEsIEwzKS4gVGhlIG9uZSBvd25lciBvZiBhIGJ1bmRsZSdzIGJ5dGVzIGFuZFxuICogb2Ygd2hlcmUgYSBjb21taXQgbGFuZHM6IGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IsIHRoZSBsb2cuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gTm8gcGF5bG9hZCAodGhlIHN0YWdlIHN0YWdlZCBubyB3cml0ZSkg4oaSIGFuIEVNUFRZIGJ1bmRsZSBnb2VzIHRvIHRoZSBsb2csIGFuZCBub3RoaW5nIGVsc2VcbiAqICAgICAgbW92ZXM6IGxpdmUgc3RhdGUgYW5kIHRoZSBtaXJyb3Iga2VlcCB0aGVpciBnZW5lcmF0aW9uLiBFdmVyeSBleGVjdXRlZCBzdGFnZSBpcyBhIGN1cnNvciBzdG9wLlxuICogICAyLiBBIHBheWxvYWQg4oaSIGl0cyBuYW1lcyBhcmUgcmVhZCBmaXJzdCwgc28gYSBzdGFtcCB0aGF0IGNhbm5vdCBiZSByZWFkIGZhaWxzIHRoZSBjb21taXQgYmVmb3JlXG4gKiAgICAgIGFueXRoaW5nIG1vdmVzOyB0aGVuIGl0cyByYXcgcm93cyBidWlsZCBsaXZlIHN0YXRlJ3MgbmV4dCBnZW5lcmF0aW9uLCBgc2NydWJQYXRjaGBcbiAqICAgICAgKGBzY3J1Yi50c2AsIHRoZSByZWNvcmQncyBvd24pIHB1dHMgdGhlIHBsYWNlaG9sZGVyIGF0IGVhY2ggcmVkYWN0ZWQgcGF0aCB0aGF0IGhvbGRzIGEgdmFsdWVcbiAqICAgICAgKGluIGEgc3BpbmUgY29weSwgbmV2ZXIgaW4gdGhlIHJhdyBwYXRjaCksIGFuZCB0aGUgbWlycm9yIGFuZCB0aGUgbG9nIHRha2UgdGhlIHNjcnViYmVkIHJvd3Mg4oCUXG4gKiAgICAgIG5ldmVyIHRoZSByYXcgb25lcy4gVGhlIHJlZGFjdGVkIHBhdGhzIGFyZSBkYXRhIGJ5IG5vdzogdGhlIGVuZ2luZSBkZWNpZGVkIHRoZW0gcGVyIHdyaXRlXG4gKiAgICAgIChgUmVjb3JkRnJhbWUgwrcgd3JpdGVgKTsgbm90aGluZyBoZXJlIGltcG9ydHMgdGhlIGVuZ2luZSdzIHZlcmRpY3QgKEM0KS5cbiAqICAgMy4gVGhlIGJ1bmRsZSdzIEtFWSBPUkRFUiBpcyB0aGUgcmVjb3JkJ3MgYnl0ZXM6IGBvdmVyd3JpdGVgLCBgdXBkYXRlc2AsIGByZWRhY3RlZFBhdGhzYCwgYHRyYWNlYCxcbiAqICAgICAgYHN0YWdlYCwgYHN0YWdlSWRgLCBgcnVudGltZVN0YWdlSWRgLCB0aGVuIGB1bnRyYWNrZWRTb3VyY2VzYCwgYHRhZ3NgIGFuZCBgcGhhc2VgLCBlYWNoIG9ubHlcbiAqICAgICAgd2hlbiBpdCBoYXMgc29tZXRoaW5nIHRvIHNheSAoYWJzZW50LCBuZXZlciBlbXB0eSkuIGBFdmVudExvZyDCtyByZWNvcmRgIGFwcGVuZHMgYGlkeGAuIFRoZVxuICogICAgICBuYW1lcyBhcmUgbmFtZXM6IG5vIHJlZGFjdGlvbiByZWFkcyB0aGVtLCBhbmQgbm8gZW5jb2RpbmcgKGBjb21taXRWYWx1ZXNgKSBjaGFuZ2VzIHRoZW0uXG4gKlxuICogVGhlIGZyYW1lIChgU3RhZ2VDb250ZXh0YCkgZGVjaWRlcyBXSEFUIGlzIGNvbW1pdHRlZCDigJQgdGhlIHBheWxvYWQsIHRoZSBuYW1lcywgd2hldGhlciB0aGUgYnVuZGxlXG4gKiBpcyBhIGNvbnRpbnVhdGlvbiDigJQgYW5kIGtlZXBzIHdoYXQgaXMgbm90IHRoZSByZWNvcmQ6IHJldGVudGlvbiwgZGlhZ25vc3RpY3MsIHRoZSBkZXYtbW9kZVxuICogd2FybmluZ3MgYW5kIHRoZSBjb21taXQgb2JzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgc2NydWJQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0UGhhc2UsIE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5LCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSdzIG5ldCBjaGFuZ2UsIGFzIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBjb21taXRgIGhhbmRzIGl0IG92ZXIuICovXG5leHBvcnQgdHlwZSBDb21taXRQYXlsb2FkID0gUmV0dXJuVHlwZTxUcmFuc2FjdGlvbkJ1ZmZlclsnY29tbWl0J10+O1xuXG4vKiogV2hhdCBuYW1lcyBhIGNvbW1pdCBvbiB0aGUgcmVjb3JkLCBiZXNpZGUgaXRzIHBheWxvYWQgKGxhdyAzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0U3RhbXAge1xuICBzdGFnZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seVNldDxVbnRyYWNrZWRTb3VyY2U+O1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBXaGVyZSBhIGNvbW1pdCBsYW5kczogbGl2ZSBzdGF0ZSBhbHdheXM7IHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgd2hlbiB0aGUgcnVuIGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdFRhcmdldHMge1xuICBzdGF0ZTogU2hhcmVkTWVtb3J5O1xuICBtaXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIGxvZz86IEV2ZW50TG9nO1xufVxuXG50eXBlIE5hbWVzID0gUGljazxDb21taXRCdW5kbGUsICdzdGFnZScgfCAnc3RhZ2VJZCcgfCAncnVudGltZVN0YWdlSWQnIHwgJ3VudHJhY2tlZFNvdXJjZXMnIHwgJ3RhZ3MnIHwgJ3BoYXNlJz47XG5cbi8qKiBSZWNvcmQgb25lIGNvbW1pdCAodGhlIG1vZHVsZSBsYXcpLiBgcGF5bG9hZGAgYWJzZW50ID0gdGhlIGVtcHR5IGNvbW1pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRDb21taXQocGF5bG9hZDogQ29tbWl0UGF5bG9hZCB8IHVuZGVmaW5lZCwgc3RhbXA6IENvbW1pdFN0YW1wLCBpbnRvOiBDb21taXRUYXJnZXRzKTogdm9pZCB7XG4gIGlmIChwYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnRvLmxvZz8ucmVjb3JkKGJ1bmRsZU9mKHt9LCB7fSwgW10sIFtdLCBuYW1lc09mKHN0YW1wKSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5hbWVzT2Yoc3RhbXApO1xuICBjb25zdCB7IHJlZGFjdGVkUGF0aHMsIHRyYWNlIH0gPSBwYXlsb2FkO1xuICBpbnRvLnN0YXRlLmFwcGx5UGF0Y2gocGF5bG9hZC5vdmVyd3JpdGUsIHBheWxvYWQudXBkYXRlcywgdHJhY2UpO1xuICBjb25zdCBvdmVyd3JpdGUgPSBzY3J1YlBhdGNoKHBheWxvYWQub3ZlcndyaXRlLCByZWRhY3RlZFBhdGhzKTtcbiAgY29uc3QgdXBkYXRlcyA9IHNjcnViUGF0Y2gocGF5bG9hZC51cGRhdGVzLCByZWRhY3RlZFBhdGhzKTtcbiAgaW50by5taXJyb3I/LmFwcGx5UGF0Y2gob3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSk7XG4gIGludG8ubG9nPy5yZWNvcmQoYnVuZGxlT2Yob3ZlcndyaXRlLCB1cGRhdGVzLCBbLi4ucmVkYWN0ZWRQYXRoc10sIHRyYWNlLCBuYW1lcykpO1xufVxuXG4vKiogVEhFIGJ1bmRsZSAobGF3IDMpOiB0aGUgcGF5bG9hZCdzIGZvdXIga2V5cywgdGhlIHRocmVlIG5hbWVzLCB0aGVuIGVhY2ggb3B0aW9uYWwgbmFtZSB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5LiAqL1xuZnVuY3Rpb24gYnVuZGxlT2YoXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICByZWRhY3RlZFBhdGhzOiBzdHJpbmdbXSxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbiAgbmFtZXM6IE5hbWVzLFxuKTogQ29tbWl0QnVuZGxlIHtcbiAgY29uc3QgeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH0gPSBuYW1lcztcbiAgY29uc3QgYnVuZGxlOiBDb21taXRCdW5kbGUgPSB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UsIHN0YWdlLCBzdGFnZUlkLCBydW50aW1lU3RhZ2VJZCB9O1xuICBpZiAodW50cmFja2VkU291cmNlcykgYnVuZGxlLnVudHJhY2tlZFNvdXJjZXMgPSB1bnRyYWNrZWRTb3VyY2VzO1xuICBpZiAodGFncykgYnVuZGxlLnRhZ3MgPSB0YWdzO1xuICBpZiAocGhhc2UpIGJ1bmRsZS5waGFzZSA9IHBoYXNlO1xuICByZXR1cm4gYnVuZGxlO1xufVxuXG4vKiogVGhlIG5hbWVzLCByZWFkIG9uY2Ug4oCUIGJlZm9yZSBhbnl0aGluZyBtb3ZlcyAobGF3IDIpLiBBbiBvcHRpb25hbCBvbmUgd2l0aCBub3RoaW5nIHRvIHNheSBpcyBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIG5hbWVzT2YoeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH06IENvbW1pdFN0YW1wKTogTmFtZXMge1xuICByZXR1cm4ge1xuICAgIHN0YWdlLFxuICAgIHN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgdW50cmFja2VkU291cmNlczogIXVudHJhY2tlZFNvdXJjZXMgfHwgdW50cmFja2VkU291cmNlcy5zaXplID09PSAwID8gdW5kZWZpbmVkIDogWy4uLnVudHJhY2tlZFNvdXJjZXNdLFxuICAgIHRhZ3M6ICF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGFncyxcbiAgICBwaGFzZTogcGhhc2UgfHwgdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* scrub.ts — the commit log's scrub: the placeholder at every redacted path of a patch (C4, L2).
|
|
3
|
-
*
|
|
4
|
-
* The RECORD's half of a redaction. A redacted path is DATA by the time it reaches here — the
|
|
5
|
-
* transaction buffer's `redactedPaths`, registered by `RecordFrame · write` from the scrub it was
|
|
6
|
-
* handed — and this file only writes `LOG_PLACEHOLDER` (`placeholders.ts`) where such a path holds
|
|
7
|
-
* a value. It never decides WHAT is secret: that is the engine's verdict (`redaction.ts`, L4 —
|
|
8
|
-
* `RedactionRule` and the write decision), which also owns the OTHER placeholder, the scope channel's
|
|
9
|
-
* `SCOPE_PLACEHOLDER`. Before C4 both halves lived in `redaction.ts`, so the record imported the
|
|
10
|
-
* engine's policy module to write a string.
|
|
11
|
-
*
|
|
12
|
-
* THE LAW:
|
|
13
|
-
* 1. A path is scrubbed only where it holds a DEFINED value — scrubbing never invents a field.
|
|
14
|
-
* 2. Paths are scrubbed in the set's order, against the tree as scrubbed so far: a path under one
|
|
15
|
-
* already scrubbed finds a string, not a container, and is left alone.
|
|
16
|
-
* 3. The input patch is never edited. `scrubPatch` copies only the spine of each scrubbed path
|
|
17
|
-
* (and nothing at all when nothing is scrubbed); `redactPatch` hands back a fresh deep copy.
|
|
18
|
-
*/
|
|
19
|
-
import type { MemoryPatch } from './types.js';
|
|
20
|
-
/**
|
|
21
|
-
* The commit log's scrub: `patch` with {@link LOG_PLACEHOLDER} at every path in `redactedPaths` that
|
|
22
|
-
* holds a defined value — the copy `recordCommit` records and feeds the redacted mirror.
|
|
23
|
-
*
|
|
24
|
-
* CLONE-FREE (9.33.0). The patch is the transaction buffer's commit-time payload, already the record's
|
|
25
|
-
* own copy (`TransactionBuffer · commit` clones each surviving path once; the buffer is dropped at
|
|
26
|
-
* commit), so the scrub copies only what it must not edit in place:
|
|
27
|
-
* - no path to scrub (no policy, no per-call mark — the common case) → `patch` ITSELF, no copy at all;
|
|
28
|
-
* - otherwise → a new root and a shallow copy of each container on a scrubbed path (`pathOps ·
|
|
29
|
-
* ownSpine`), every other subtree shared with `patch`. `patch` is never edited.
|
|
30
|
-
* The engine called the public {@link redactPatch} (a whole `structuredClone`) twice per commit before
|
|
31
|
-
* 9.33.0. The bytes are the same: a scrubbed path holds the placeholder, every other path the value the
|
|
32
|
-
* buffer cloned (pinned by the 9.18.1 / 9.19.1 redaction byte tests).
|
|
33
|
-
*
|
|
34
|
-
* Paths are scrubbed in the set's order, against the tree as scrubbed so far: a path under one already
|
|
35
|
-
* scrubbed finds a string, not a container, and is left alone (as before).
|
|
36
|
-
*
|
|
37
|
-
* INTERNAL — the result shares structure with `patch`. A caller outside the commit path wants
|
|
38
|
-
* {@link redactPatch}.
|
|
39
|
-
*
|
|
40
|
-
* @param redactedPaths DELIM-joined paths (`TransactionBuffer`'s `redactedPaths`; a bundle's
|
|
41
|
-
* `redactedPaths` array works too).
|
|
42
|
-
*/
|
|
43
|
-
export declare function scrubPatch(patch: MemoryPatch, redactedPaths: Iterable<string>): MemoryPatch;
|
|
44
|
-
/**
|
|
45
|
-
* Redacts sensitive values in a patch for logging/debugging — the PUBLIC scrub (`footprintjs/advanced`),
|
|
46
|
-
* its contract unchanged since 4.x: a fresh deep copy of `patch` (`structuredClone`) with
|
|
47
|
-
* {@link LOG_PLACEHOLDER} at every listed path that holds a defined value. Shares nothing with `patch`
|
|
48
|
-
* and never edits it. (It lived in `memory/utils.ts` until 9.33.0 and in `memory/redaction.ts` until
|
|
49
|
-
* C4; the engine's own commit path uses the clone-free {@link scrubPatch}.) No caller inside the
|
|
50
|
-
* library: it stays on `footprintjs/advanced` for the consumers that import it until 10.0.0 (the trace
|
|
51
|
-
* extraction, E6), which takes it off every door.
|
|
52
|
-
*/
|
|
53
|
-
export declare function redactPatch(patch: MemoryPatch, redactedSet: Set<string>): MemoryPatch;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* scrub.ts — the commit log's scrub: the placeholder at every redacted path of a patch (C4, L2).
|
|
3
|
-
*
|
|
4
|
-
* The RECORD's half of a redaction. A redacted path is DATA by the time it reaches here — the
|
|
5
|
-
* transaction buffer's `redactedPaths`, registered by `RecordFrame · write` from the scrub it was
|
|
6
|
-
* handed — and this file only writes `LOG_PLACEHOLDER` (`placeholders.ts`) where such a path holds
|
|
7
|
-
* a value. It never decides WHAT is secret: that is the engine's verdict (`redaction.ts`, L4 —
|
|
8
|
-
* `RedactionRule` and the write decision), which also owns the OTHER placeholder, the scope channel's
|
|
9
|
-
* `SCOPE_PLACEHOLDER`. Before C4 both halves lived in `redaction.ts`, so the record imported the
|
|
10
|
-
* engine's policy module to write a string.
|
|
11
|
-
*
|
|
12
|
-
* THE LAW:
|
|
13
|
-
* 1. A path is scrubbed only where it holds a DEFINED value — scrubbing never invents a field.
|
|
14
|
-
* 2. Paths are scrubbed in the set's order, against the tree as scrubbed so far: a path under one
|
|
15
|
-
* already scrubbed finds a string, not a container, and is left alone.
|
|
16
|
-
* 3. The input patch is never edited. `scrubPatch` copies only the spine of each scrubbed path
|
|
17
|
-
* (and nothing at all when nothing is scrubbed); `redactPatch` hands back a fresh deep copy.
|
|
18
|
-
*/
|
|
19
|
-
import { nativeGet, nativeHas, nativeSet, ownedRootOf, ownSpine } from './pathOps.js';
|
|
20
|
-
import { DELIM } from './paths.js';
|
|
21
|
-
import { LOG_PLACEHOLDER } from './placeholders.js';
|
|
22
|
-
/**
|
|
23
|
-
* The commit log's scrub: `patch` with {@link LOG_PLACEHOLDER} at every path in `redactedPaths` that
|
|
24
|
-
* holds a defined value — the copy `recordCommit` records and feeds the redacted mirror.
|
|
25
|
-
*
|
|
26
|
-
* CLONE-FREE (9.33.0). The patch is the transaction buffer's commit-time payload, already the record's
|
|
27
|
-
* own copy (`TransactionBuffer · commit` clones each surviving path once; the buffer is dropped at
|
|
28
|
-
* commit), so the scrub copies only what it must not edit in place:
|
|
29
|
-
* - no path to scrub (no policy, no per-call mark — the common case) → `patch` ITSELF, no copy at all;
|
|
30
|
-
* - otherwise → a new root and a shallow copy of each container on a scrubbed path (`pathOps ·
|
|
31
|
-
* ownSpine`), every other subtree shared with `patch`. `patch` is never edited.
|
|
32
|
-
* The engine called the public {@link redactPatch} (a whole `structuredClone`) twice per commit before
|
|
33
|
-
* 9.33.0. The bytes are the same: a scrubbed path holds the placeholder, every other path the value the
|
|
34
|
-
* buffer cloned (pinned by the 9.18.1 / 9.19.1 redaction byte tests).
|
|
35
|
-
*
|
|
36
|
-
* Paths are scrubbed in the set's order, against the tree as scrubbed so far: a path under one already
|
|
37
|
-
* scrubbed finds a string, not a container, and is left alone (as before).
|
|
38
|
-
*
|
|
39
|
-
* INTERNAL — the result shares structure with `patch`. A caller outside the commit path wants
|
|
40
|
-
* {@link redactPatch}.
|
|
41
|
-
*
|
|
42
|
-
* @param redactedPaths DELIM-joined paths (`TransactionBuffer`'s `redactedPaths`; a bundle's
|
|
43
|
-
* `redactedPaths` array works too).
|
|
44
|
-
*/
|
|
45
|
-
export function scrubPatch(patch, redactedPaths) {
|
|
46
|
-
let out;
|
|
47
|
-
let owned;
|
|
48
|
-
for (const flat of redactedPaths) {
|
|
49
|
-
const segs = flat.split(DELIM);
|
|
50
|
-
const current = out ?? patch;
|
|
51
|
-
if (!nativeHas(current, segs) || nativeGet(current, segs) === undefined)
|
|
52
|
-
continue;
|
|
53
|
-
if (out === undefined) {
|
|
54
|
-
owned = new WeakSet();
|
|
55
|
-
out = ownedRootOf(patch, owned);
|
|
56
|
-
}
|
|
57
|
-
ownSpine(out, segs, owned);
|
|
58
|
-
nativeSet(out, segs, LOG_PLACEHOLDER);
|
|
59
|
-
}
|
|
60
|
-
return out ?? patch;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Redacts sensitive values in a patch for logging/debugging — the PUBLIC scrub (`footprintjs/advanced`),
|
|
64
|
-
* its contract unchanged since 4.x: a fresh deep copy of `patch` (`structuredClone`) with
|
|
65
|
-
* {@link LOG_PLACEHOLDER} at every listed path that holds a defined value. Shares nothing with `patch`
|
|
66
|
-
* and never edits it. (It lived in `memory/utils.ts` until 9.33.0 and in `memory/redaction.ts` until
|
|
67
|
-
* C4; the engine's own commit path uses the clone-free {@link scrubPatch}.) No caller inside the
|
|
68
|
-
* library: it stays on `footprintjs/advanced` for the consumers that import it until 10.0.0 (the trace
|
|
69
|
-
* extraction, E6), which takes it off every door.
|
|
70
|
-
*/
|
|
71
|
-
export function redactPatch(patch, redactedSet) {
|
|
72
|
-
return scrubPatch(structuredClone(patch), redactedSet);
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NydWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9zY3J1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBa0IsRUFBRSxhQUErQjtJQUM1RSxJQUFJLEdBQTRCLENBQUM7SUFDakMsSUFBSSxLQUFrQyxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLFNBQVM7UUFDbEYsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEIsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7WUFDOUIsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFnQixDQUFDO1FBQ2pELENBQUM7UUFDRCxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFNLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBa0IsRUFBRSxXQUF3QjtJQUN0RSxPQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc2NydWIudHMg4oCUIHRoZSBjb21taXQgbG9nJ3Mgc2NydWI6IHRoZSBwbGFjZWhvbGRlciBhdCBldmVyeSByZWRhY3RlZCBwYXRoIG9mIGEgcGF0Y2ggKEM0LCBMMikuXG4gKlxuICogVGhlIFJFQ09SRCdzIGhhbGYgb2YgYSByZWRhY3Rpb24uIEEgcmVkYWN0ZWQgcGF0aCBpcyBEQVRBIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgaGVyZSDigJQgdGhlXG4gKiB0cmFuc2FjdGlvbiBidWZmZXIncyBgcmVkYWN0ZWRQYXRoc2AsIHJlZ2lzdGVyZWQgYnkgYFJlY29yZEZyYW1lIMK3IHdyaXRlYCBmcm9tIHRoZSBzY3J1YiBpdCB3YXNcbiAqIGhhbmRlZCDigJQgYW5kIHRoaXMgZmlsZSBvbmx5IHdyaXRlcyBgTE9HX1BMQUNFSE9MREVSYCAoYHBsYWNlaG9sZGVycy50c2ApIHdoZXJlIHN1Y2ggYSBwYXRoIGhvbGRzXG4gKiBhIHZhbHVlLiBJdCBuZXZlciBkZWNpZGVzIFdIQVQgaXMgc2VjcmV0OiB0aGF0IGlzIHRoZSBlbmdpbmUncyB2ZXJkaWN0IChgcmVkYWN0aW9uLnRzYCwgTDQg4oCUXG4gKiBgUmVkYWN0aW9uUnVsZWAgYW5kIHRoZSB3cml0ZSBkZWNpc2lvbiksIHdoaWNoIGFsc28gb3ducyB0aGUgT1RIRVIgcGxhY2Vob2xkZXIsIHRoZSBzY29wZSBjaGFubmVsJ3NcbiAqIGBTQ09QRV9QTEFDRUhPTERFUmAuIEJlZm9yZSBDNCBib3RoIGhhbHZlcyBsaXZlZCBpbiBgcmVkYWN0aW9uLnRzYCwgc28gdGhlIHJlY29yZCBpbXBvcnRlZCB0aGVcbiAqIGVuZ2luZSdzIHBvbGljeSBtb2R1bGUgdG8gd3JpdGUgYSBzdHJpbmcuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gQSBwYXRoIGlzIHNjcnViYmVkIG9ubHkgd2hlcmUgaXQgaG9sZHMgYSBERUZJTkVEIHZhbHVlIOKAlCBzY3J1YmJpbmcgbmV2ZXIgaW52ZW50cyBhIGZpZWxkLlxuICogICAyLiBQYXRocyBhcmUgc2NydWJiZWQgaW4gdGhlIHNldCdzIG9yZGVyLCBhZ2FpbnN0IHRoZSB0cmVlIGFzIHNjcnViYmVkIHNvIGZhcjogYSBwYXRoIHVuZGVyIG9uZVxuICogICAgICBhbHJlYWR5IHNjcnViYmVkIGZpbmRzIGEgc3RyaW5nLCBub3QgYSBjb250YWluZXIsIGFuZCBpcyBsZWZ0IGFsb25lLlxuICogICAzLiBUaGUgaW5wdXQgcGF0Y2ggaXMgbmV2ZXIgZWRpdGVkLiBgc2NydWJQYXRjaGAgY29waWVzIG9ubHkgdGhlIHNwaW5lIG9mIGVhY2ggc2NydWJiZWQgcGF0aFxuICogICAgICAoYW5kIG5vdGhpbmcgYXQgYWxsIHdoZW4gbm90aGluZyBpcyBzY3J1YmJlZCk7IGByZWRhY3RQYXRjaGAgaGFuZHMgYmFjayBhIGZyZXNoIGRlZXAgY29weS5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQsIG5hdGl2ZUhhcywgbmF0aXZlU2V0LCBvd25lZFJvb3RPZiwgb3duU3BpbmUgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgREVMSU0gfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB7IExPR19QTEFDRUhPTERFUiB9IGZyb20gJy4vcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBUaGUgY29tbWl0IGxvZydzIHNjcnViOiBgcGF0Y2hgIHdpdGgge0BsaW5rIExPR19QTEFDRUhPTERFUn0gYXQgZXZlcnkgcGF0aCBpbiBgcmVkYWN0ZWRQYXRoc2AgdGhhdFxuICogaG9sZHMgYSBkZWZpbmVkIHZhbHVlIOKAlCB0aGUgY29weSBgcmVjb3JkQ29tbWl0YCByZWNvcmRzIGFuZCBmZWVkcyB0aGUgcmVkYWN0ZWQgbWlycm9yLlxuICpcbiAqIENMT05FLUZSRUUgKDkuMzMuMCkuIFRoZSBwYXRjaCBpcyB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyJ3MgY29tbWl0LXRpbWUgcGF5bG9hZCwgYWxyZWFkeSB0aGUgcmVjb3JkJ3NcbiAqIG93biBjb3B5IChgVHJhbnNhY3Rpb25CdWZmZXIgwrcgY29tbWl0YCBjbG9uZXMgZWFjaCBzdXJ2aXZpbmcgcGF0aCBvbmNlOyB0aGUgYnVmZmVyIGlzIGRyb3BwZWQgYXRcbiAqIGNvbW1pdCksIHNvIHRoZSBzY3J1YiBjb3BpZXMgb25seSB3aGF0IGl0IG11c3Qgbm90IGVkaXQgaW4gcGxhY2U6XG4gKiAgIC0gbm8gcGF0aCB0byBzY3J1YiAobm8gcG9saWN5LCBubyBwZXItY2FsbCBtYXJrIOKAlCB0aGUgY29tbW9uIGNhc2UpIOKGkiBgcGF0Y2hgIElUU0VMRiwgbm8gY29weSBhdCBhbGw7XG4gKiAgIC0gb3RoZXJ3aXNlIOKGkiBhIG5ldyByb290IGFuZCBhIHNoYWxsb3cgY29weSBvZiBlYWNoIGNvbnRhaW5lciBvbiBhIHNjcnViYmVkIHBhdGggKGBwYXRoT3BzIMK3XG4gKiAgICAgb3duU3BpbmVgKSwgZXZlcnkgb3RoZXIgc3VidHJlZSBzaGFyZWQgd2l0aCBgcGF0Y2hgLiBgcGF0Y2hgIGlzIG5ldmVyIGVkaXRlZC5cbiAqIFRoZSBlbmdpbmUgY2FsbGVkIHRoZSBwdWJsaWMge0BsaW5rIHJlZGFjdFBhdGNofSAoYSB3aG9sZSBgc3RydWN0dXJlZENsb25lYCkgdHdpY2UgcGVyIGNvbW1pdCBiZWZvcmVcbiAqIDkuMzMuMC4gVGhlIGJ5dGVzIGFyZSB0aGUgc2FtZTogYSBzY3J1YmJlZCBwYXRoIGhvbGRzIHRoZSBwbGFjZWhvbGRlciwgZXZlcnkgb3RoZXIgcGF0aCB0aGUgdmFsdWUgdGhlXG4gKiBidWZmZXIgY2xvbmVkIChwaW5uZWQgYnkgdGhlIDkuMTguMSAvIDkuMTkuMSByZWRhY3Rpb24gYnl0ZSB0ZXN0cykuXG4gKlxuICogUGF0aHMgYXJlIHNjcnViYmVkIGluIHRoZSBzZXQncyBvcmRlciwgYWdhaW5zdCB0aGUgdHJlZSBhcyBzY3J1YmJlZCBzbyBmYXI6IGEgcGF0aCB1bmRlciBvbmUgYWxyZWFkeVxuICogc2NydWJiZWQgZmluZHMgYSBzdHJpbmcsIG5vdCBhIGNvbnRhaW5lciwgYW5kIGlzIGxlZnQgYWxvbmUgKGFzIGJlZm9yZSkuXG4gKlxuICogSU5URVJOQUwg4oCUIHRoZSByZXN1bHQgc2hhcmVzIHN0cnVjdHVyZSB3aXRoIGBwYXRjaGAuIEEgY2FsbGVyIG91dHNpZGUgdGhlIGNvbW1pdCBwYXRoIHdhbnRzXG4gKiB7QGxpbmsgcmVkYWN0UGF0Y2h9LlxuICpcbiAqIEBwYXJhbSByZWRhY3RlZFBhdGhzIERFTElNLWpvaW5lZCBwYXRocyAoYFRyYW5zYWN0aW9uQnVmZmVyYCdzIGByZWRhY3RlZFBhdGhzYDsgYSBidW5kbGUnc1xuICogICBgcmVkYWN0ZWRQYXRoc2AgYXJyYXkgd29ya3MgdG9vKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcnViUGF0Y2gocGF0Y2g6IE1lbW9yeVBhdGNoLCByZWRhY3RlZFBhdGhzOiBJdGVyYWJsZTxzdHJpbmc+KTogTWVtb3J5UGF0Y2gge1xuICBsZXQgb3V0OiBNZW1vcnlQYXRjaCB8IHVuZGVmaW5lZDtcbiAgbGV0IG93bmVkOiBXZWFrU2V0PG9iamVjdD4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZmxhdCBvZiByZWRhY3RlZFBhdGhzKSB7XG4gICAgY29uc3Qgc2VncyA9IGZsYXQuc3BsaXQoREVMSU0pO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBvdXQgPz8gcGF0Y2g7XG4gICAgaWYgKCFuYXRpdmVIYXMoY3VycmVudCwgc2VncykgfHwgbmF0aXZlR2V0KGN1cnJlbnQsIHNlZ3MpID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgICBvdXQgPSBvd25lZFJvb3RPZihwYXRjaCwgb3duZWQpIGFzIE1lbW9yeVBhdGNoO1xuICAgIH1cbiAgICBvd25TcGluZShvdXQsIHNlZ3MsIG93bmVkISk7XG4gICAgbmF0aXZlU2V0KG91dCwgc2VncywgTE9HX1BMQUNFSE9MREVSKTtcbiAgfVxuICByZXR1cm4gb3V0ID8/IHBhdGNoO1xufVxuXG4vKipcbiAqIFJlZGFjdHMgc2Vuc2l0aXZlIHZhbHVlcyBpbiBhIHBhdGNoIGZvciBsb2dnaW5nL2RlYnVnZ2luZyDigJQgdGhlIFBVQkxJQyBzY3J1YiAoYGZvb3RwcmludGpzL2FkdmFuY2VkYCksXG4gKiBpdHMgY29udHJhY3QgdW5jaGFuZ2VkIHNpbmNlIDQueDogYSBmcmVzaCBkZWVwIGNvcHkgb2YgYHBhdGNoYCAoYHN0cnVjdHVyZWRDbG9uZWApIHdpdGhcbiAqIHtAbGluayBMT0dfUExBQ0VIT0xERVJ9IGF0IGV2ZXJ5IGxpc3RlZCBwYXRoIHRoYXQgaG9sZHMgYSBkZWZpbmVkIHZhbHVlLiBTaGFyZXMgbm90aGluZyB3aXRoIGBwYXRjaGBcbiAqIGFuZCBuZXZlciBlZGl0cyBpdC4gKEl0IGxpdmVkIGluIGBtZW1vcnkvdXRpbHMudHNgIHVudGlsIDkuMzMuMCBhbmQgaW4gYG1lbW9yeS9yZWRhY3Rpb24udHNgIHVudGlsXG4gKiBDNDsgdGhlIGVuZ2luZSdzIG93biBjb21taXQgcGF0aCB1c2VzIHRoZSBjbG9uZS1mcmVlIHtAbGluayBzY3J1YlBhdGNofS4pIE5vIGNhbGxlciBpbnNpZGUgdGhlXG4gKiBsaWJyYXJ5OiBpdCBzdGF5cyBvbiBgZm9vdHByaW50anMvYWR2YW5jZWRgIGZvciB0aGUgY29uc3VtZXJzIHRoYXQgaW1wb3J0IGl0IHVudGlsIDEwLjAuMCAodGhlIHRyYWNlXG4gKiBleHRyYWN0aW9uLCBFNiksIHdoaWNoIHRha2VzIGl0IG9mZiBldmVyeSBkb29yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkYWN0UGF0Y2gocGF0Y2g6IE1lbW9yeVBhdGNoLCByZWRhY3RlZFNldDogU2V0PHN0cmluZz4pOiBNZW1vcnlQYXRjaCB7XG4gIHJldHVybiBzY3J1YlBhdGNoKHN0cnVjdHVyZWRDbG9uZShwYXRjaCksIHJlZGFjdGVkU2V0KTtcbn1cbiJdfQ==
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* types.ts — the record's types: a bundle, its rows, its patches, its encoding, and the
|
|
3
|
-
* execution tree as the record's readers read it.
|
|
4
|
-
*
|
|
5
|
-
* Imports nothing. The record names nothing outside itself (C6, `RECORD_FILES` in
|
|
6
|
-
* scripts/layering.config.cjs): the engine's frame types — the stage snapshot, the flow
|
|
7
|
-
* messages, the retention dials — live beside the frame, in `frameTypes.ts` (L4).
|
|
8
|
-
*/
|
|
9
|
-
/** A flat key-value bag representing a state patch (overwrite or merge). */
|
|
10
|
-
export interface MemoryPatch {
|
|
11
|
-
[key: string]: any;
|
|
12
|
-
}
|
|
13
|
-
/** A single entry in the chronological operation trace. */
|
|
14
|
-
export interface TraceEntry {
|
|
15
|
-
/** Canonical path string (segments joined by DELIM). */
|
|
16
|
-
path: string;
|
|
17
|
-
/**
|
|
18
|
-
* Per-write read provenance (#P1) — the keys this stage had TRACKED-READ at
|
|
19
|
-
* the moment this path was (last) written: the temporal-prefix attribution
|
|
20
|
-
* that lets slices link a specific write to only the reads that could have
|
|
21
|
-
* fed it (a stage reading `a,b` and writing `x,y` no longer implies x←b).
|
|
22
|
-
* ABSENT unless the `writeProvenance: 'reads-prefix'` dial is on — charts
|
|
23
|
-
* that never enable it keep byte-identical commit logs. Read prefixes only
|
|
24
|
-
* grow during a stage, so under delta mode's one-entry-per-path dedup the
|
|
25
|
-
* LAST write's prefix == the union across all of that path's writes.
|
|
26
|
-
* Honest ceiling: a write with NO tracked reads before it records `[]` —
|
|
27
|
-
* "depended on no tracked reads" is information, not absence.
|
|
28
|
-
*/
|
|
29
|
-
readKeys?: string[];
|
|
30
|
-
/**
|
|
31
|
-
* - `'set'` — hard overwrite; `overwrite[path]` holds the full final value.
|
|
32
|
-
* - `'merge'` — deep union merge; `updates[path]` holds the accumulated delta.
|
|
33
|
-
* - `'append'` — (#13c-B, produced only under {@link CommitValuesMode}
|
|
34
|
-
* `'delta'`) the path's final value is its base value plus a tail of new
|
|
35
|
-
* trailing elements; `overwrite[path]` holds ONLY the tail. Replay
|
|
36
|
-
* reconstructs by concatenation. NOT idempotent — delta-mode bundles
|
|
37
|
-
* carry exactly one trace entry per surviving path.
|
|
38
|
-
* - `'delete'` — (#13c-B, produced only under `'delta'`; absorbs backlog
|
|
39
|
-
* B8) the key was explicitly removed via `deleteValue()`. Replay removes
|
|
40
|
-
* the key. `overwrite[path]` still ENUMERATES the path (value
|
|
41
|
-
* `undefined`) so key-set consumers keep seeing the changed key.
|
|
42
|
-
*
|
|
43
|
-
* `overwrite` values are therefore VERB-QUALIFIED: consumers that read
|
|
44
|
-
* `bundle.overwrite[key]` as "the full value written" must use
|
|
45
|
-
* `commitValueAt(commitLog, idx, key)` (from `footprintjs/trace`) when the
|
|
46
|
-
* log may contain delta-mode bundles.
|
|
47
|
-
*/
|
|
48
|
-
verb: 'set' | 'merge' | 'append' | 'delete';
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* RFC-003 D2 — read paths that BYPASS read tracking:
|
|
52
|
-
* - `'args'` — the stage called `getArgs()` / `$getArgs()` with non-empty
|
|
53
|
-
* run input (frozen, untracked by design)
|
|
54
|
-
* - `'env'` — the stage called `getEnv()` / `$getEnv()` with a non-empty
|
|
55
|
-
* execution environment (frozen, untracked by design)
|
|
56
|
-
* - `'silent'` — the stage performed a silent read (`getValueSilent` /
|
|
57
|
-
* `getValueDirect`) of a key it never tracked-read in the same stage.
|
|
58
|
-
* Silent reads SHADOWED by a tracked read of the same key in the same
|
|
59
|
-
* stage (TypedScope array-proxy internals, `$batchArray`) are NOT
|
|
60
|
-
* flagged — their read→write edge is already captured.
|
|
61
|
-
*/
|
|
62
|
-
export type UntrackedSource = 'args' | 'env' | 'silent';
|
|
63
|
-
/** The atomic bundle produced by TransactionBuffer.commit(). */
|
|
64
|
-
export interface CommitBundle {
|
|
65
|
-
/** Auto-assigned step index (set by EventLog.record). */
|
|
66
|
-
idx?: number;
|
|
67
|
-
/** Human-readable stage name. */
|
|
68
|
-
stage: string;
|
|
69
|
-
/** Stable stage identifier (matches spec node id). */
|
|
70
|
-
stageId: string;
|
|
71
|
-
/** Unique per-execution-step identifier. Format: [subflowPath/]stageId#executionIndex */
|
|
72
|
-
runtimeStageId: string;
|
|
73
|
-
/** Chronological write log for deterministic replay. */
|
|
74
|
-
trace: TraceEntry[];
|
|
75
|
-
/** Paths that should be redacted in UI (sensitive data). */
|
|
76
|
-
redactedPaths: string[];
|
|
77
|
-
/** Hard overwrite patches. */
|
|
78
|
-
overwrite: MemoryPatch;
|
|
79
|
-
/** Deep merge patches. */
|
|
80
|
-
updates: MemoryPatch;
|
|
81
|
-
/**
|
|
82
|
-
* RFC-003 D2 honesty markers — untracked read paths this stage consumed
|
|
83
|
-
* (see {@link UntrackedSource}). ABSENT when the stage used none, so
|
|
84
|
-
* charts that never touch those paths keep byte-identical commit logs.
|
|
85
|
-
* Causal-slice consumers (`causalChain`/`formatCausalChain`) surface this
|
|
86
|
-
* as "slice may be incomplete here". Residual limitation (by design):
|
|
87
|
-
* values smuggled through JS closures are undetectable.
|
|
88
|
-
*/
|
|
89
|
-
untrackedSources?: ReadonlyArray<UntrackedSource>;
|
|
90
|
-
/**
|
|
91
|
-
* Declared tags (9.21.0) — the names the author put on this stage at build
|
|
92
|
-
* time (`FlowChartBuilder.tag` / `options.tags`), stamped here by the
|
|
93
|
-
* traverser so a stored recording carries its own milestones without a
|
|
94
|
-
* consumer's id conventions. ABSENT when the stage declares none, so an
|
|
95
|
-
* untagged chart's log is byte-identical to 9.20.0 (the law
|
|
96
|
-
* `untrackedSources` keeps). Recorded on the FIRST bundle of each execution
|
|
97
|
-
* of the stage — the stage's own bundle, the one without a `phase` — so
|
|
98
|
-
* retry attempts stamp it once, a continuation (a fork child's `'repeat'`,
|
|
99
|
-
* a mount's `'exit'` after its merge-back) carries none, and a mount whose
|
|
100
|
-
* exit is its only bundle (no `outputMapper`) carries them on that bundle. Free strings: footprintjs assigns
|
|
101
|
-
* them no meaning; `tagStops` (footprintjs/trace) keeps a stop when any of
|
|
102
|
-
* them matches.
|
|
103
|
-
*/
|
|
104
|
-
tags?: readonly string[];
|
|
105
|
-
/**
|
|
106
|
-
* Which CONTINUATION of a stage's execution this bundle is (9.39.0) —
|
|
107
|
-
* stamped by the WRITER. THE LAW: the FIRST bundle per `runtimeStageId` is
|
|
108
|
-
* the stage's own and carries NO `phase`; only a bundle after it can:
|
|
109
|
-
*
|
|
110
|
-
* - `'exit'` — a subflow mount's exit commit (`SubflowExecutor`) after its
|
|
111
|
-
* merge-back bundle (`outputMapper`). A mount without a merge-back (a lazy
|
|
112
|
-
* mount, every `parallelForEach` branch, any mount with no mapper) has
|
|
113
|
-
* its exit as its ONLY bundle — its own, so no `phase`; the execution
|
|
114
|
-
* tree names it a mount.
|
|
115
|
-
* - `'repeat'` — the fan-out's settle commit of a fork child's frame
|
|
116
|
-
* (`ChildrenExecutor`), after the child's own bundle.
|
|
117
|
-
*
|
|
118
|
-
* A reader groups a stage's bundles by `runtimeStageId` and reads this
|
|
119
|
-
* field to know what each continuation is; it never infers it from the
|
|
120
|
-
* log's shape. A log written before 9.39.0 carries no `phase` anywhere —
|
|
121
|
-
* see `inferLegacyPhases` (footprintjs/trace) for how it is still read.
|
|
122
|
-
*/
|
|
123
|
-
phase?: CommitPhase;
|
|
124
|
-
}
|
|
125
|
-
/** The continuation a bundle records — see {@link CommitBundle.phase}. */
|
|
126
|
-
export type CommitPhase = 'exit' | 'repeat';
|
|
127
|
-
/**
|
|
128
|
-
* Per-write read-provenance policy (#P1) — the fourth dial of the
|
|
129
|
-
* readTracking/writeTracking/commitValues family, same 6-site propagation
|
|
130
|
-
* pattern (executor option → ExecutionRuntime.use* → root StageContext →
|
|
131
|
-
* createNext/createChild inheritance → SubflowExecutor duck-push).
|
|
132
|
-
*
|
|
133
|
-
* - `'off'` (default) — zero cost, byte-identical commit logs.
|
|
134
|
-
* - `'reads-prefix'` — every committed {@link TraceEntry} carries
|
|
135
|
-
* `readKeys`: the keys tracked-read BEFORE that write (temporal-prefix
|
|
136
|
-
* attribution). Cost: one Set-to-array copy per write. Consumed by
|
|
137
|
-
* `causalChain`'s `edgeAttribution: 'per-write'` and the slice layer.
|
|
138
|
-
*/
|
|
139
|
-
export type WriteProvenanceMode = 'off' | 'reads-prefix';
|
|
140
|
-
/**
|
|
141
|
-
* Policy for how commit-bundle VALUES are encoded into the commit log
|
|
142
|
-
* (#13c-B) — completes the `readTracking`/`writeTracking` dial family.
|
|
143
|
-
* Unlike those two (which gate lossy snapshot bookkeeping), this dial is
|
|
144
|
-
* **lossless in both modes** — it changes the commit log's *encoding*,
|
|
145
|
-
* never its *information*; any step's full state stays exactly
|
|
146
|
-
* reconstructable by replay.
|
|
147
|
-
*
|
|
148
|
-
* - `'full'` (default) — every surviving `set` path stores the full final
|
|
149
|
-
* value, one trace entry per operation. Byte-identical to the historical
|
|
150
|
-
* behavior.
|
|
151
|
-
* - `'delta'` — two changes, both replay-covered by `applySmartMerge`:
|
|
152
|
-
* 1. **`append` detection**: when a path's net change is "the base array
|
|
153
|
-
* plus new trailing elements" (strict prefix), the bundle records ONLY
|
|
154
|
-
* the tail under a `verb: 'append'` trace entry — the growing-history
|
|
155
|
-
* commit log becomes linear in tail size instead of O(N²) retained.
|
|
156
|
-
* A real `verb: 'delete'` entry replaces the `set: undefined` flattening
|
|
157
|
-
* for `deleteValue()` (closes the documented MemoryPatch limitation).
|
|
158
|
-
* 2. **One trace entry per surviving path** (append is not idempotent on
|
|
159
|
-
* replay): the verb is resolved from the path's base→final relationship
|
|
160
|
-
* and op mix; entries are ordered by each path's LAST touch.
|
|
161
|
-
*
|
|
162
|
-
* Honest cost note: append detection is NEW wall work — an O(|base|)
|
|
163
|
-
* structural prefix compare per array-set path per commit (today's
|
|
164
|
-
* `deepEqual` fast-fails on length in O(1) for a grown array). On a hit the
|
|
165
|
-
* commit gets cheaper in both wall and heap (the O(|final|) clone shrinks to
|
|
166
|
-
* O(|tail|)); on a miss it pays compare + full clone. `'full'` pays zero —
|
|
167
|
-
* the detection branch is mode-gated.
|
|
168
|
-
*
|
|
169
|
-
* Set via `new FlowChartExecutor(chart, { commitValues })` or
|
|
170
|
-
* `executor.setCommitValues(mode)` (before `run()`). The active mode is
|
|
171
|
-
* surfaced as the snapshot discriminant `RuntimeSnapshot.commitValues`.
|
|
172
|
-
*/
|
|
173
|
-
export type CommitValuesMode = 'full' | 'delta';
|
|
174
|
-
/**
|
|
175
|
-
* The execution tree as the record's readers read it (C6): the fields a reader touches and
|
|
176
|
-
* nothing else. `commitStops` (and so `tagStops` and every strategy built on it) reads the mount
|
|
177
|
-
* marker (`subflowId`) and the root's `id`; `keysReadFromExecutionTree` reads the keys of
|
|
178
|
-
* `stageReads`; both key on `runtimeStageId` and walk `next` and `children`.
|
|
179
|
-
*
|
|
180
|
-
* A structural type the record owns, so the readers name nothing of the engine. The engine's
|
|
181
|
-
* `StageSnapshot` (`getSnapshot().executionTree`) is one — a supertype of it, so every caller
|
|
182
|
-
* that hands a snapshot's tree over compiles unchanged — and so is a stored recording's parsed
|
|
183
|
-
* JSON with these fields. Every field is optional: a reader that finds one absent reads on.
|
|
184
|
-
*
|
|
185
|
-
* @example
|
|
186
|
-
* ```typescript
|
|
187
|
-
* import { type ExecutionTree, keysReadFromExecutionTree } from 'footprintjs/trace';
|
|
188
|
-
*
|
|
189
|
-
* const tree: ExecutionTree = {
|
|
190
|
-
* runtimeStageId: 'seed#0',
|
|
191
|
-
* next: { runtimeStageId: 'decide#1', stageReads: { creditTier: 'A' } },
|
|
192
|
-
* };
|
|
193
|
-
* keysReadFromExecutionTree(tree).lookup('decide#1'); // ['creditTier']
|
|
194
|
-
* ```
|
|
195
|
-
*/
|
|
196
|
-
export interface ExecutionTree {
|
|
197
|
-
/** The stage's id (prefixed inside a subflow). `commitStops` reads the root's to place a subflow's seed. */
|
|
198
|
-
readonly id?: string;
|
|
199
|
-
/** `[subflowPath/]stageId#executionIndex` — what a reader keys on. A node without one is not a stage. */
|
|
200
|
-
readonly runtimeStageId?: string;
|
|
201
|
-
/** Present on a subflow mount: the stop there says `kind: 'mount'`. */
|
|
202
|
-
readonly subflowId?: string;
|
|
203
|
-
/** What the stage tracked-read, by key. Only the KEYS are read: a `'summary'` marker serves as well as a value. */
|
|
204
|
-
readonly stageReads?: Readonly<Record<string, unknown>>;
|
|
205
|
-
/** The stage that ran next. */
|
|
206
|
-
readonly next?: ExecutionTree;
|
|
207
|
-
/** The stages that ran as this one's children (a fork's branches, a decider's chosen branch). */
|
|
208
|
-
readonly children?: readonly ExecutionTree[];
|
|
209
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* types.ts — the record's types: a bundle, its rows, its patches, its encoding, and the
|
|
3
|
-
* execution tree as the record's readers read it.
|
|
4
|
-
*
|
|
5
|
-
* Imports nothing. The record names nothing outside itself (C6, `RECORD_FILES` in
|
|
6
|
-
* scripts/layering.config.cjs): the engine's frame types — the stage snapshot, the flow
|
|
7
|
-
* messages, the retention dials — live beside the frame, in `frameTypes.ts` (L4).
|
|
8
|
-
*/
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0eXBlcy50cyDigJQgdGhlIHJlY29yZCdzIHR5cGVzOiBhIGJ1bmRsZSwgaXRzIHJvd3MsIGl0cyBwYXRjaGVzLCBpdHMgZW5jb2RpbmcsIGFuZCB0aGVcbiAqIGV4ZWN1dGlvbiB0cmVlIGFzIHRoZSByZWNvcmQncyByZWFkZXJzIHJlYWQgaXQuXG4gKlxuICogSW1wb3J0cyBub3RoaW5nLiBUaGUgcmVjb3JkIG5hbWVzIG5vdGhpbmcgb3V0c2lkZSBpdHNlbGYgKEM2LCBgUkVDT1JEX0ZJTEVTYCBpblxuICogc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKTogdGhlIGVuZ2luZSdzIGZyYW1lIHR5cGVzIOKAlCB0aGUgc3RhZ2Ugc25hcHNob3QsIHRoZSBmbG93XG4gKiBtZXNzYWdlcywgdGhlIHJldGVudGlvbiBkaWFscyDigJQgbGl2ZSBiZXNpZGUgdGhlIGZyYW1lLCBpbiBgZnJhbWVUeXBlcy50c2AgKEw0KS5cbiAqL1xuXG4vLyDilIDilIAgUGF0Y2ggJiBUcmFjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEEgZmxhdCBrZXktdmFsdWUgYmFnIHJlcHJlc2VudGluZyBhIHN0YXRlIHBhdGNoIChvdmVyd3JpdGUgb3IgbWVyZ2UpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlQYXRjaCB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqIEEgc2luZ2xlIGVudHJ5IGluIHRoZSBjaHJvbm9sb2dpY2FsIG9wZXJhdGlvbiB0cmFjZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2VFbnRyeSB7XG4gIC8qKiBDYW5vbmljYWwgcGF0aCBzdHJpbmcgKHNlZ21lbnRzIGpvaW5lZCBieSBERUxJTSkuICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKCNQMSkg4oCUIHRoZSBrZXlzIHRoaXMgc3RhZ2UgaGFkIFRSQUNLRUQtUkVBRCBhdFxuICAgKiB0aGUgbW9tZW50IHRoaXMgcGF0aCB3YXMgKGxhc3QpIHdyaXR0ZW46IHRoZSB0ZW1wb3JhbC1wcmVmaXggYXR0cmlidXRpb25cbiAgICogdGhhdCBsZXRzIHNsaWNlcyBsaW5rIGEgc3BlY2lmaWMgd3JpdGUgdG8gb25seSB0aGUgcmVhZHMgdGhhdCBjb3VsZCBoYXZlXG4gICAqIGZlZCBpdCAoYSBzdGFnZSByZWFkaW5nIGBhLGJgIGFuZCB3cml0aW5nIGB4LHlgIG5vIGxvbmdlciBpbXBsaWVzIHjihpBiKS5cbiAgICogQUJTRU5UIHVubGVzcyB0aGUgYHdyaXRlUHJvdmVuYW5jZTogJ3JlYWRzLXByZWZpeCdgIGRpYWwgaXMgb24g4oCUIGNoYXJ0c1xuICAgKiB0aGF0IG5ldmVyIGVuYWJsZSBpdCBrZWVwIGJ5dGUtaWRlbnRpY2FsIGNvbW1pdCBsb2dzLiBSZWFkIHByZWZpeGVzIG9ubHlcbiAgICogZ3JvdyBkdXJpbmcgYSBzdGFnZSwgc28gdW5kZXIgZGVsdGEgbW9kZSdzIG9uZS1lbnRyeS1wZXItcGF0aCBkZWR1cCB0aGVcbiAgICogTEFTVCB3cml0ZSdzIHByZWZpeCA9PSB0aGUgdW5pb24gYWNyb3NzIGFsbCBvZiB0aGF0IHBhdGgncyB3cml0ZXMuXG4gICAqIEhvbmVzdCBjZWlsaW5nOiBhIHdyaXRlIHdpdGggTk8gdHJhY2tlZCByZWFkcyBiZWZvcmUgaXQgcmVjb3JkcyBgW11gIOKAlFxuICAgKiBcImRlcGVuZGVkIG9uIG5vIHRyYWNrZWQgcmVhZHNcIiBpcyBpbmZvcm1hdGlvbiwgbm90IGFic2VuY2UuXG4gICAqL1xuICByZWFkS2V5cz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogLSBgJ3NldCdgICAgIOKAlCBoYXJkIG92ZXJ3cml0ZTsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgdGhlIGZ1bGwgZmluYWwgdmFsdWUuXG4gICAqIC0gYCdtZXJnZSdgICDigJQgZGVlcCB1bmlvbiBtZXJnZTsgYHVwZGF0ZXNbcGF0aF1gIGhvbGRzIHRoZSBhY2N1bXVsYXRlZCBkZWx0YS5cbiAgICogLSBgJ2FwcGVuZCdgIOKAlCAoIzEzYy1CLCBwcm9kdWNlZCBvbmx5IHVuZGVyIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfVxuICAgKiAgIGAnZGVsdGEnYCkgdGhlIHBhdGgncyBmaW5hbCB2YWx1ZSBpcyBpdHMgYmFzZSB2YWx1ZSBwbHVzIGEgdGFpbCBvZiBuZXdcbiAgICogICB0cmFpbGluZyBlbGVtZW50czsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgT05MWSB0aGUgdGFpbC4gUmVwbGF5XG4gICAqICAgcmVjb25zdHJ1Y3RzIGJ5IGNvbmNhdGVuYXRpb24uIE5PVCBpZGVtcG90ZW50IOKAlCBkZWx0YS1tb2RlIGJ1bmRsZXNcbiAgICogICBjYXJyeSBleGFjdGx5IG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGguXG4gICAqIC0gYCdkZWxldGUnYCDigJQgKCMxM2MtQiwgcHJvZHVjZWQgb25seSB1bmRlciBgJ2RlbHRhJ2A7IGFic29yYnMgYmFja2xvZ1xuICAgKiAgIEI4KSB0aGUga2V5IHdhcyBleHBsaWNpdGx5IHJlbW92ZWQgdmlhIGBkZWxldGVWYWx1ZSgpYC4gUmVwbGF5IHJlbW92ZXNcbiAgICogICB0aGUga2V5LiBgb3ZlcndyaXRlW3BhdGhdYCBzdGlsbCBFTlVNRVJBVEVTIHRoZSBwYXRoICh2YWx1ZVxuICAgKiAgIGB1bmRlZmluZWRgKSBzbyBrZXktc2V0IGNvbnN1bWVycyBrZWVwIHNlZWluZyB0aGUgY2hhbmdlZCBrZXkuXG4gICAqXG4gICAqIGBvdmVyd3JpdGVgIHZhbHVlcyBhcmUgdGhlcmVmb3JlIFZFUkItUVVBTElGSUVEOiBjb25zdW1lcnMgdGhhdCByZWFkXG4gICAqIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiIG11c3QgdXNlXG4gICAqIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCAoZnJvbSBgZm9vdHByaW50anMvdHJhY2VgKSB3aGVuIHRoZVxuICAgKiBsb2cgbWF5IGNvbnRhaW4gZGVsdGEtbW9kZSBidW5kbGVzLlxuICAgKi9cbiAgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIHwgJ2FwcGVuZCcgfCAnZGVsZXRlJztcbn1cblxuLyoqXG4gKiBSRkMtMDAzIEQyIOKAlCByZWFkIHBhdGhzIHRoYXQgQllQQVNTIHJlYWQgdHJhY2tpbmc6XG4gKiAtIGAnYXJncydgICAg4oCUIHRoZSBzdGFnZSBjYWxsZWQgYGdldEFyZ3MoKWAgLyBgJGdldEFyZ3MoKWAgd2l0aCBub24tZW1wdHlcbiAqICAgcnVuIGlucHV0IChmcm96ZW4sIHVudHJhY2tlZCBieSBkZXNpZ24pXG4gKiAtIGAnZW52J2AgICAg4oCUIHRoZSBzdGFnZSBjYWxsZWQgYGdldEVudigpYCAvIGAkZ2V0RW52KClgIHdpdGggYSBub24tZW1wdHlcbiAqICAgZXhlY3V0aW9uIGVudmlyb25tZW50IChmcm96ZW4sIHVudHJhY2tlZCBieSBkZXNpZ24pXG4gKiAtIGAnc2lsZW50J2Ag4oCUIHRoZSBzdGFnZSBwZXJmb3JtZWQgYSBzaWxlbnQgcmVhZCAoYGdldFZhbHVlU2lsZW50YCAvXG4gKiAgIGBnZXRWYWx1ZURpcmVjdGApIG9mIGEga2V5IGl0IG5ldmVyIHRyYWNrZWQtcmVhZCBpbiB0aGUgc2FtZSBzdGFnZS5cbiAqICAgU2lsZW50IHJlYWRzIFNIQURPV0VEIGJ5IGEgdHJhY2tlZCByZWFkIG9mIHRoZSBzYW1lIGtleSBpbiB0aGUgc2FtZVxuICogICBzdGFnZSAoVHlwZWRTY29wZSBhcnJheS1wcm94eSBpbnRlcm5hbHMsIGAkYmF0Y2hBcnJheWApIGFyZSBOT1RcbiAqICAgZmxhZ2dlZCDigJQgdGhlaXIgcmVhZOKGkndyaXRlIGVkZ2UgaXMgYWxyZWFkeSBjYXB0dXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVW50cmFja2VkU291cmNlID0gJ2FyZ3MnIHwgJ2VudicgfCAnc2lsZW50JztcblxuLyoqIFRoZSBhdG9taWMgYnVuZGxlIHByb2R1Y2VkIGJ5IFRyYW5zYWN0aW9uQnVmZmVyLmNvbW1pdCgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21taXRCdW5kbGUge1xuICAvKiogQXV0by1hc3NpZ25lZCBzdGVwIGluZGV4IChzZXQgYnkgRXZlbnRMb2cucmVjb3JkKS4gKi9cbiAgaWR4PzogbnVtYmVyO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2U6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENocm9ub2xvZ2ljYWwgd3JpdGUgbG9nIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheS4gKi9cbiAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgLyoqIFBhdGhzIHRoYXQgc2hvdWxkIGJlIHJlZGFjdGVkIGluIFVJIChzZW5zaXRpdmUgZGF0YSkuICovXG4gIHJlZGFjdGVkUGF0aHM6IHN0cmluZ1tdO1xuICAvKiogSGFyZCBvdmVyd3JpdGUgcGF0Y2hlcy4gKi9cbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaDtcbiAgLyoqIERlZXAgbWVyZ2UgcGF0Y2hlcy4gKi9cbiAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQyIGhvbmVzdHkgbWFya2VycyDigJQgdW50cmFja2VkIHJlYWQgcGF0aHMgdGhpcyBzdGFnZSBjb25zdW1lZFxuICAgKiAoc2VlIHtAbGluayBVbnRyYWNrZWRTb3VyY2V9KS4gQUJTRU5UIHdoZW4gdGhlIHN0YWdlIHVzZWQgbm9uZSwgc29cbiAgICogY2hhcnRzIHRoYXQgbmV2ZXIgdG91Y2ggdGhvc2UgcGF0aHMga2VlcCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy5cbiAgICogQ2F1c2FsLXNsaWNlIGNvbnN1bWVycyAoYGNhdXNhbENoYWluYC9gZm9ybWF0Q2F1c2FsQ2hhaW5gKSBzdXJmYWNlIHRoaXNcbiAgICogYXMgXCJzbGljZSBtYXkgYmUgaW5jb21wbGV0ZSBoZXJlXCIuIFJlc2lkdWFsIGxpbWl0YXRpb24gKGJ5IGRlc2lnbik6XG4gICAqIHZhbHVlcyBzbXVnZ2xlZCB0aHJvdWdoIEpTIGNsb3N1cmVzIGFyZSB1bmRldGVjdGFibGUuXG4gICAqL1xuICB1bnRyYWNrZWRTb3VyY2VzPzogUmVhZG9ubHlBcnJheTxVbnRyYWNrZWRTb3VyY2U+O1xuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4wKSDigJQgdGhlIG5hbWVzIHRoZSBhdXRob3IgcHV0IG9uIHRoaXMgc3RhZ2UgYXQgYnVpbGRcbiAgICogdGltZSAoYEZsb3dDaGFydEJ1aWxkZXIudGFnYCAvIGBvcHRpb25zLnRhZ3NgKSwgc3RhbXBlZCBoZXJlIGJ5IHRoZVxuICAgKiB0cmF2ZXJzZXIgc28gYSBzdG9yZWQgcmVjb3JkaW5nIGNhcnJpZXMgaXRzIG93biBtaWxlc3RvbmVzIHdpdGhvdXQgYVxuICAgKiBjb25zdW1lcidzIGlkIGNvbnZlbnRpb25zLiBBQlNFTlQgd2hlbiB0aGUgc3RhZ2UgZGVjbGFyZXMgbm9uZSwgc28gYW5cbiAgICogdW50YWdnZWQgY2hhcnQncyBsb2cgaXMgYnl0ZS1pZGVudGljYWwgdG8gOS4yMC4wICh0aGUgbGF3XG4gICAqIGB1bnRyYWNrZWRTb3VyY2VzYCBrZWVwcykuIFJlY29yZGVkIG9uIHRoZSBGSVJTVCBidW5kbGUgb2YgZWFjaCBleGVjdXRpb25cbiAgICogb2YgdGhlIHN0YWdlIOKAlCB0aGUgc3RhZ2UncyBvd24gYnVuZGxlLCB0aGUgb25lIHdpdGhvdXQgYSBgcGhhc2VgIOKAlCBzb1xuICAgKiByZXRyeSBhdHRlbXB0cyBzdGFtcCBpdCBvbmNlLCBhIGNvbnRpbnVhdGlvbiAoYSBmb3JrIGNoaWxkJ3MgYCdyZXBlYXQnYCxcbiAgICogYSBtb3VudCdzIGAnZXhpdCdgIGFmdGVyIGl0cyBtZXJnZS1iYWNrKSBjYXJyaWVzIG5vbmUsIGFuZCBhIG1vdW50IHdob3NlXG4gICAqIGV4aXQgaXMgaXRzIG9ubHkgYnVuZGxlIChubyBgb3V0cHV0TWFwcGVyYCkgY2FycmllcyB0aGVtIG9uIHRoYXQgYnVuZGxlLiBGcmVlIHN0cmluZ3M6IGZvb3RwcmludGpzIGFzc2lnbnNcbiAgICogdGhlbSBubyBtZWFuaW5nOyBgdGFnU3RvcHNgIChmb290cHJpbnRqcy90cmFjZSkga2VlcHMgYSBzdG9wIHdoZW4gYW55IG9mXG4gICAqIHRoZW0gbWF0Y2hlcy5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoaWNoIENPTlRJTlVBVElPTiBvZiBhIHN0YWdlJ3MgZXhlY3V0aW9uIHRoaXMgYnVuZGxlIGlzICg5LjM5LjApIOKAlFxuICAgKiBzdGFtcGVkIGJ5IHRoZSBXUklURVIuIFRIRSBMQVc6IHRoZSBGSVJTVCBidW5kbGUgcGVyIGBydW50aW1lU3RhZ2VJZGAgaXNcbiAgICogdGhlIHN0YWdlJ3Mgb3duIGFuZCBjYXJyaWVzIE5PIGBwaGFzZWA7IG9ubHkgYSBidW5kbGUgYWZ0ZXIgaXQgY2FuOlxuICAgKlxuICAgKiAtIGAnZXhpdCdgIOKAlCBhIHN1YmZsb3cgbW91bnQncyBleGl0IGNvbW1pdCAoYFN1YmZsb3dFeGVjdXRvcmApIGFmdGVyIGl0c1xuICAgKiAgIG1lcmdlLWJhY2sgYnVuZGxlIChgb3V0cHV0TWFwcGVyYCkuIEEgbW91bnQgd2l0aG91dCBhIG1lcmdlLWJhY2sgKGEgbGF6eVxuICAgKiAgIG1vdW50LCBldmVyeSBgcGFyYWxsZWxGb3JFYWNoYCBicmFuY2gsIGFueSBtb3VudCB3aXRoIG5vIG1hcHBlcikgaGFzXG4gICAqICAgaXRzIGV4aXQgYXMgaXRzIE9OTFkgYnVuZGxlIOKAlCBpdHMgb3duLCBzbyBubyBgcGhhc2VgOyB0aGUgZXhlY3V0aW9uXG4gICAqICAgdHJlZSBuYW1lcyBpdCBhIG1vdW50LlxuICAgKiAtIGAncmVwZWF0J2Ag4oCUIHRoZSBmYW4tb3V0J3Mgc2V0dGxlIGNvbW1pdCBvZiBhIGZvcmsgY2hpbGQncyBmcmFtZVxuICAgKiAgIChgQ2hpbGRyZW5FeGVjdXRvcmApLCBhZnRlciB0aGUgY2hpbGQncyBvd24gYnVuZGxlLlxuICAgKlxuICAgKiBBIHJlYWRlciBncm91cHMgYSBzdGFnZSdzIGJ1bmRsZXMgYnkgYHJ1bnRpbWVTdGFnZUlkYCBhbmQgcmVhZHMgdGhpc1xuICAgKiBmaWVsZCB0byBrbm93IHdoYXQgZWFjaCBjb250aW51YXRpb24gaXM7IGl0IG5ldmVyIGluZmVycyBpdCBmcm9tIHRoZVxuICAgKiBsb2cncyBzaGFwZS4gQSBsb2cgd3JpdHRlbiBiZWZvcmUgOS4zOS4wIGNhcnJpZXMgbm8gYHBoYXNlYCBhbnl3aGVyZSDigJRcbiAgICogc2VlIGBpbmZlckxlZ2FjeVBoYXNlc2AgKGZvb3RwcmludGpzL3RyYWNlKSBmb3IgaG93IGl0IGlzIHN0aWxsIHJlYWQuXG4gICAqL1xuICBwaGFzZT86IENvbW1pdFBoYXNlO1xufVxuXG4vKiogVGhlIGNvbnRpbnVhdGlvbiBhIGJ1bmRsZSByZWNvcmRzIOKAlCBzZWUge0BsaW5rIENvbW1pdEJ1bmRsZS5waGFzZX0uICovXG5leHBvcnQgdHlwZSBDb21taXRQaGFzZSA9ICdleGl0JyB8ICdyZXBlYXQnO1xuXG4vKipcbiAqIFBlci13cml0ZSByZWFkLXByb3ZlbmFuY2UgcG9saWN5ICgjUDEpIOKAlCB0aGUgZm91cnRoIGRpYWwgb2YgdGhlXG4gKiByZWFkVHJhY2tpbmcvd3JpdGVUcmFja2luZy9jb21taXRWYWx1ZXMgZmFtaWx5LCBzYW1lIDYtc2l0ZSBwcm9wYWdhdGlvblxuICogcGF0dGVybiAoZXhlY3V0b3Igb3B0aW9uIOKGkiBFeGVjdXRpb25SdW50aW1lLnVzZSog4oaSIHJvb3QgU3RhZ2VDb250ZXh0IOKGklxuICogY3JlYXRlTmV4dC9jcmVhdGVDaGlsZCBpbmhlcml0YW5jZSDihpIgU3ViZmxvd0V4ZWN1dG9yIGR1Y2stcHVzaCkuXG4gKlxuICogLSBgJ29mZidgIChkZWZhdWx0KSDigJQgemVybyBjb3N0LCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy5cbiAqIC0gYCdyZWFkcy1wcmVmaXgnYCDigJQgZXZlcnkgY29tbWl0dGVkIHtAbGluayBUcmFjZUVudHJ5fSBjYXJyaWVzXG4gKiAgIGByZWFkS2V5c2A6IHRoZSBrZXlzIHRyYWNrZWQtcmVhZCBCRUZPUkUgdGhhdCB3cml0ZSAodGVtcG9yYWwtcHJlZml4XG4gKiAgIGF0dHJpYnV0aW9uKS4gQ29zdDogb25lIFNldC10by1hcnJheSBjb3B5IHBlciB3cml0ZS4gQ29uc3VtZWQgYnlcbiAqICAgYGNhdXNhbENoYWluYCdzIGBlZGdlQXR0cmlidXRpb246ICdwZXItd3JpdGUnYCBhbmQgdGhlIHNsaWNlIGxheWVyLlxuICovXG5leHBvcnQgdHlwZSBXcml0ZVByb3ZlbmFuY2VNb2RlID0gJ29mZicgfCAncmVhZHMtcHJlZml4JztcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyBjb21taXQtYnVuZGxlIFZBTFVFUyBhcmUgZW5jb2RlZCBpbnRvIHRoZSBjb21taXQgbG9nXG4gKiAoIzEzYy1CKSDigJQgY29tcGxldGVzIHRoZSBgcmVhZFRyYWNraW5nYC9gd3JpdGVUcmFja2luZ2AgZGlhbCBmYW1pbHkuXG4gKiBVbmxpa2UgdGhvc2UgdHdvICh3aGljaCBnYXRlIGxvc3N5IHNuYXBzaG90IGJvb2trZWVwaW5nKSwgdGhpcyBkaWFsIGlzXG4gKiAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiDigJQgaXQgY2hhbmdlcyB0aGUgY29tbWl0IGxvZydzICplbmNvZGluZyosXG4gKiBuZXZlciBpdHMgKmluZm9ybWF0aW9uKjsgYW55IHN0ZXAncyBmdWxsIHN0YXRlIHN0YXlzIGV4YWN0bHlcbiAqIHJlY29uc3RydWN0YWJsZSBieSByZXBsYXkuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBwYXRoIHN0b3JlcyB0aGUgZnVsbCBmaW5hbFxuICogICB2YWx1ZSwgb25lIHRyYWNlIGVudHJ5IHBlciBvcGVyYXRpb24uIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsXG4gKiAgIGJlaGF2aW9yLlxuICogLSBgJ2RlbHRhJ2Ag4oCUIHR3byBjaGFuZ2VzLCBib3RoIHJlcGxheS1jb3ZlcmVkIGJ5IGBhcHBseVNtYXJ0TWVyZ2VgOlxuICogICAxLiAqKmBhcHBlbmRgIGRldGVjdGlvbioqOiB3aGVuIGEgcGF0aCdzIG5ldCBjaGFuZ2UgaXMgXCJ0aGUgYmFzZSBhcnJheVxuICogICAgICBwbHVzIG5ldyB0cmFpbGluZyBlbGVtZW50c1wiIChzdHJpY3QgcHJlZml4KSwgdGhlIGJ1bmRsZSByZWNvcmRzIE9OTFlcbiAqICAgICAgdGhlIHRhaWwgdW5kZXIgYSBgdmVyYjogJ2FwcGVuZCdgIHRyYWNlIGVudHJ5IOKAlCB0aGUgZ3Jvd2luZy1oaXN0b3J5XG4gKiAgICAgIGNvbW1pdCBsb2cgYmVjb21lcyBsaW5lYXIgaW4gdGFpbCBzaXplIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkLlxuICogICAgICBBIHJlYWwgYHZlcmI6ICdkZWxldGUnYCBlbnRyeSByZXBsYWNlcyB0aGUgYHNldDogdW5kZWZpbmVkYCBmbGF0dGVuaW5nXG4gKiAgICAgIGZvciBgZGVsZXRlVmFsdWUoKWAgKGNsb3NlcyB0aGUgZG9jdW1lbnRlZCBNZW1vcnlQYXRjaCBsaW1pdGF0aW9uKS5cbiAqICAgMi4gKipPbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKiogKGFwcGVuZCBpcyBub3QgaWRlbXBvdGVudCBvblxuICogICAgICByZXBsYXkpOiB0aGUgdmVyYiBpcyByZXNvbHZlZCBmcm9tIHRoZSBwYXRoJ3MgYmFzZeKGkmZpbmFsIHJlbGF0aW9uc2hpcFxuICogICAgICBhbmQgb3AgbWl4OyBlbnRyaWVzIGFyZSBvcmRlcmVkIGJ5IGVhY2ggcGF0aCdzIExBU1QgdG91Y2guXG4gKlxuICogSG9uZXN0IGNvc3Qgbm90ZTogYXBwZW5kIGRldGVjdGlvbiBpcyBORVcgd2FsbCB3b3JrIOKAlCBhbiBPKHxiYXNlfClcbiAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQgKHRvZGF5J3NcbiAqIGBkZWVwRXF1YWxgIGZhc3QtZmFpbHMgb24gbGVuZ3RoIGluIE8oMSkgZm9yIGEgZ3Jvd24gYXJyYXkpLiBPbiBhIGhpdCB0aGVcbiAqIGNvbW1pdCBnZXRzIGNoZWFwZXIgaW4gYm90aCB3YWxsIGFuZCBoZWFwICh0aGUgTyh8ZmluYWx8KSBjbG9uZSBzaHJpbmtzIHRvXG4gKiBPKHx0YWlsfCkpOyBvbiBhIG1pc3MgaXQgcGF5cyBjb21wYXJlICsgZnVsbCBjbG9uZS4gYCdmdWxsJ2AgcGF5cyB6ZXJvIOKAlFxuICogdGhlIGRldGVjdGlvbiBicmFuY2ggaXMgbW9kZS1nYXRlZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gVGhlIGFjdGl2ZSBtb2RlIGlzXG4gKiBzdXJmYWNlZCBhcyB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50IGBSdW50aW1lU25hcHNob3QuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0VmFsdWVzTW9kZSA9ICdmdWxsJyB8ICdkZWx0YSc7XG5cbi8vIOKUgOKUgCBUaGUgZXhlY3V0aW9uIHRyZWUsIGFzIHRoZSByZWNvcmQncyByZWFkZXJzIHJlYWQgaXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhlIGV4ZWN1dGlvbiB0cmVlIGFzIHRoZSByZWNvcmQncyByZWFkZXJzIHJlYWQgaXQgKEM2KTogdGhlIGZpZWxkcyBhIHJlYWRlciB0b3VjaGVzIGFuZFxuICogbm90aGluZyBlbHNlLiBgY29tbWl0U3RvcHNgIChhbmQgc28gYHRhZ1N0b3BzYCBhbmQgZXZlcnkgc3RyYXRlZ3kgYnVpbHQgb24gaXQpIHJlYWRzIHRoZSBtb3VudFxuICogbWFya2VyIChgc3ViZmxvd0lkYCkgYW5kIHRoZSByb290J3MgYGlkYDsgYGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWVgIHJlYWRzIHRoZSBrZXlzIG9mXG4gKiBgc3RhZ2VSZWFkc2A7IGJvdGgga2V5IG9uIGBydW50aW1lU3RhZ2VJZGAgYW5kIHdhbGsgYG5leHRgIGFuZCBgY2hpbGRyZW5gLlxuICpcbiAqIEEgc3RydWN0dXJhbCB0eXBlIHRoZSByZWNvcmQgb3ducywgc28gdGhlIHJlYWRlcnMgbmFtZSBub3RoaW5nIG9mIHRoZSBlbmdpbmUuIFRoZSBlbmdpbmUnc1xuICogYFN0YWdlU25hcHNob3RgIChgZ2V0U25hcHNob3QoKS5leGVjdXRpb25UcmVlYCkgaXMgb25lIOKAlCBhIHN1cGVydHlwZSBvZiBpdCwgc28gZXZlcnkgY2FsbGVyXG4gKiB0aGF0IGhhbmRzIGEgc25hcHNob3QncyB0cmVlIG92ZXIgY29tcGlsZXMgdW5jaGFuZ2VkIOKAlCBhbmQgc28gaXMgYSBzdG9yZWQgcmVjb3JkaW5nJ3MgcGFyc2VkXG4gKiBKU09OIHdpdGggdGhlc2UgZmllbGRzLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDogYSByZWFkZXIgdGhhdCBmaW5kcyBvbmUgYWJzZW50IHJlYWRzIG9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyB0eXBlIEV4ZWN1dGlvblRyZWUsIGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWUgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgdHJlZTogRXhlY3V0aW9uVHJlZSA9IHtcbiAqICAgcnVudGltZVN0YWdlSWQ6ICdzZWVkIzAnLFxuICogICBuZXh0OiB7IHJ1bnRpbWVTdGFnZUlkOiAnZGVjaWRlIzEnLCBzdGFnZVJlYWRzOiB7IGNyZWRpdFRpZXI6ICdBJyB9IH0sXG4gKiB9O1xuICoga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZSh0cmVlKS5sb29rdXAoJ2RlY2lkZSMxJyk7IC8vIFsnY3JlZGl0VGllciddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25UcmVlIHtcbiAgLyoqIFRoZSBzdGFnZSdzIGlkIChwcmVmaXhlZCBpbnNpZGUgYSBzdWJmbG93KS4gYGNvbW1pdFN0b3BzYCByZWFkcyB0aGUgcm9vdCdzIHRvIHBsYWNlIGEgc3ViZmxvdydzIHNlZWQuICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICAvKiogYFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleGAg4oCUIHdoYXQgYSByZWFkZXIga2V5cyBvbi4gQSBub2RlIHdpdGhvdXQgb25lIGlzIG5vdCBhIHN0YWdlLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgLyoqIFByZXNlbnQgb24gYSBzdWJmbG93IG1vdW50OiB0aGUgc3RvcCB0aGVyZSBzYXlzIGBraW5kOiAnbW91bnQnYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgc3RhZ2UgdHJhY2tlZC1yZWFkLCBieSBrZXkuIE9ubHkgdGhlIEtFWVMgYXJlIHJlYWQ6IGEgYCdzdW1tYXJ5J2AgbWFya2VyIHNlcnZlcyBhcyB3ZWxsIGFzIGEgdmFsdWUuICovXG4gIHJlYWRvbmx5IHN0YWdlUmVhZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc3RhZ2UgdGhhdCByYW4gbmV4dC4gKi9cbiAgcmVhZG9ubHkgbmV4dD86IEV4ZWN1dGlvblRyZWU7XG4gIC8qKiBUaGUgc3RhZ2VzIHRoYXQgcmFuIGFzIHRoaXMgb25lJ3MgY2hpbGRyZW4gKGEgZm9yaydzIGJyYW5jaGVzLCBhIGRlY2lkZXIncyBjaG9zZW4gYnJhbmNoKS4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiByZWFkb25seSBFeGVjdXRpb25UcmVlW107XG59XG4iXX0=
|